Я сижу на Debian под KDE Plasma и для решения проблемы “your country is not supported”, часто встречающийся у популярных агентов, предпочитаю мультихоп прокси (на последней миле у меня sign-box слушает 127.0.0.1:7890). Claude Code в терминале бегают через него, а вот десктопное приложение делало вид, что прокси не существует. Пришлось разобраться, и заодно оформить это в аккуратный воспроизводимый вид.

Явление официальной сборки под Linux

Во времена древних богов, воителей и королей простой народ использовал неофициальную сборку claude-desktop-debian от aaddrick, которая распаковывала виндовый установщик и заворачивала его в Electron. Однако, в конце июня 2026 Anthropic, аки Прометей, снизошла до “менее 1% пользователей” и выпустила официальную бету под Linux.

Пакет claude-desktop ставится из apt-репозитория downloads.claude.ai, и дальше речь пойдёт про него. Заявлена поддержка Debian 12 и новее, Ubuntu 22.04 и новее, на архитектурах amd64 и arm64, но я лично запускал его только на Debian 13 amd64 из под KDE.

Ставим из репозитория

Всё как обычно с внешними apt-репозиториями. Качаем ключ подписи, добавляем репозиторий, ставим пакет.

sudo curl -fsSLo /usr/share/keyrings/claude-desktop-archive-keyring.asc \
  https://downloads.claude.ai/claude-desktop/key.asc

echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/claude-desktop-archive-keyring.asc] https://downloads.claude.ai/claude-desktop/apt/stable stable main" \
  | sudo tee /etc/apt/sources.list.d/claude-desktop.list

sudo apt update && sudo apt install claude-desktop

Перед тем как довериться ключу, отпечаток можно сверить руками.

gpg --show-keys /usr/share/keyrings/claude-desktop-archive-keyring.asc
# должно быть: 31DD DE24 DDFA B679 F42D  7BD2 BAA9 29FF 1A7E CACE

Дальше обновления будут прилетать штатно вместе с apt upgrade. Проверим, что поставилось, и на что смотрит лаунчер.

Репозиторий, версия пакета и симлинк лаунчера
Репозиторий, версия пакета и симлинк лаунчера

Обратите внимание на последнюю строку, /usr/bin/claude-desktop это символическая ссылка на нативный бинарник /usr/lib/claude-desktop/claude-desktop, обычный Electron-бинарник. Именно к нему мы дальше и прицепим флаг прокси.

Почему GUI не видит прокси

Claude Code, консольный агент, читает свои настройки из файла ~/.claude/.env и переменные http_proxy/https_proxy, а Claude Desktop к этому файлу отношения не имеет, это отдельное приложение на Electron, то есть внутри там Chromium со своим сетевым стеком.

При этом Chromium под KDE берёт настройки прокси из системных настроек рабочего окружения, а переменные http_proxy из окружения он попросту игнорирует.

Посмотрим, что мы имеем.

KDE, нативный бинарник Electron и заданные, но бесполезные для GUI переменные прокси
KDE, нативный бинарник Electron и заданные, но бесполезные для GUI переменные прокси

Окружение KDE, бинарник это стриптованный ELF (тот самый Chromium внутри Electron), переменные прокси в шелле заданы. Но десктопному Claude от них ни тепло ни холодно. В системных настройках KDE прокси у меня стоит в режиме “не использовать”, и приложение честно ходит напрямую. На GNOME была бы та же история, только настройки читались бы из gsettings.

Городить системный прокси на всё окружение ради одного приложения не хочется. Значит, надо рассказать о прокси электрону.

Решение, флаг --proxy-server

У Chromium есть собственный ключ командной строки --proxy-server, который перебивает любые системные настройки. Именно его мы и передадим приложению. Заодно проверим на живом трафике, что флаг действительно работает. Поднимем фейковый прокси-порт, который просто пишет в лог всё, что к нему стучится, и запустим Claude с этим флагом.

Приложение с флагом --proxy-server честно уходит на подставной прокси
Приложение с флагом --proxy-server честно уходит на подставной прокси

Весь трафик приложения, включая claude.ai:443, ушёл на наш подставной прокси. Флаг работает. Осталось оформить это так, чтобы не запускать приложение руками из терминала каждый раз.

Обёртка-скрипт

Пишем маленький лаунчер, который подставляет флаг и передаёт дальше все аргументы и кладём его в ~/.local/bin/claude-desktop-proxy.

#!/usr/bin/env bash
PROXY_HOST="127.0.0.1"
PROXY_PORT="7890"
PROXY="http://$PROXY_HOST:$PROXY_PORT"

args=(
	"--proxy-server=${PROXY}"
	"--proxy-bypass-list=localhost;127.0.0.1;10.0.0.0/8;172.16.0.0/12;192.168.0.0/16;<local>"
)

exec /usr/bin/claude-desktop "${args[@]}" "$@"

Пара слов про содержимое. Скрипт намеренно простой, добавляет два флага и запускает бинарник. --proxy-bypass-list уводит мимо прокси то, что должно ходить напрямую. Это локалхост и приватные диапазоны 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, куда попадают LAN и дефолтные bridge-сети Docker. Иначе обращения к контейнерам и соседям по сети гоняло бы через туннель.

Делаем скрипт исполняемым.

chmod +x ~/.local/bin/claude-desktop-proxy

Правка desktop-файла

Скрипт есть, теперь надо, чтобы иконка в меню и обработчик ссылок claude:// запускали именно его.

Системный файл /usr/share/applications/claude-desktop.desktop править бесполезно, он принадлежит root и будет перезаписан при первом же обновлении пакета, в KDE лучше положить свой файл с тем же именем в ~/.local/share/applications/, пользовательский каталог перекрывает системный.

Берём за основу оригинальный desktop-файл и меняем в нём все строки Exec, чтобы они шли через обёртку. Обязательно сохраните StartupWMClass и действия New chat/New Claude Code session, иначе сломается группировка окон и пункты контекстного меню.

[Desktop Entry]
Name=Claude
Comment=Desktop application for Claude.ai
GenericName=AI Assistant
Keywords=AI;Chat;Assistant;Claude;Code;LLM;
Exec=claude-desktop-proxy %U
Icon=claude-desktop
Type=Application
StartupNotify=true
StartupWMClass=claude-desktop
SingleMainWindow=true
Categories=Utility;Development;
MimeType=x-scheme-handler/claude;
Actions=NewChat;NewCode;

[Desktop Action NewChat]
Name=New chat
Exec=claude-desktop-proxy claude://claude.ai/new

[Desktop Action NewCode]
Name=New Claude Code session
Exec=claude-desktop-proxy claude://code/new

Полный путь в Exec не обязателен. Первый токен система ищет как обычную команду, и если каталог обёртки есть в PATH, хватает одного имени. ~/.local/bin туда обычно уже входит, так что Exec=claude-desktop-proxy резолвится сам. Если каталога в PATH нет, укажите реальный абсолютный путь, например /home/pasha/.local/bin/claude-desktop-proxy.

После правки обновляем кэш меню.

update-desktop-database ~/.local/share/applications

Проверка

Полностью выходим из Claude Desktop, именно выходим, а не сворачиваем, и открываем заново из меню. Теперь он поднимается через обёртку. Смотрим на живые соединения.

ss показывает, что процессы Claude держат соединения с прокси на 7890
ss показывает, что процессы Claude держат соединения с прокси на 7890

Процессы claude и claude-desktop держат установленные соединения с 127.0.0.1:7890, то есть весь трафик приложения идёт через прокси. Что и требовалось. Приложение при этом выглядит и работает как обычно, никаких сторонних изменений внутри него нет.

Итог

Claude Code читает ~/.claude/.env, а Claude Desktop это Chromium, которому на KDE нужен свой ключ --proxy-server, лечится обёрткой на несколько строк и пользовательским desktop-файлом, ничего в системных каталогах трогать не пришлось, так что решение переживает обновления пакета.

Полезные ссылки:

  • официальная инструкция по установке под Linux;

  • статья спецов из Anthropic про установку Claude Desktop;

  • неофициальная сборка, с которой всё начиналось.

Благодарю за прочтение. Если тема близка, заходите на мой Telegram-канал Pavel Zloi, пишу там про on-prem модельки, серверы, агентов и прочие радости жизни.

Комментарии (8)


  1. hardtop
    06.07.2026 04:17

    Отличный туториал. Кратко, ёмко. Спасибо!


    1. efreelancer Автор
      06.07.2026 04:17

      Рад что пригодилось!


  1. johnnyBoy1984
    06.07.2026 04:17

    аналогичная проблема с claude desktop на win10 и особенно claude code в claude desktop. там electron приложение но claude code в desktop запускает свой node который игнорит прокси настройки, переданные electron. решается через кастомный конифиг локального окружения, который задается в настройках при создании новой задачи


    1. efreelancer Автор
      06.07.2026 04:17

      Попробуйте по предложенной мною в публикации схеме адаптировать решение под Windows, сам я видндовс не пользуюсь, поэтому точно подсказать что делать не смогу, но уверен тот же клод код прекрасно справится.


  1. ProGrade
    06.07.2026 04:17

    [~] cat ~/.claude/settings.json
    {
      "env": {
        "HTTP_PROXY": "http://127.0.0.1:8118",
        "HTTPS_PROXY": "http://127.0.0.1:8118"
      },
      "permissions": {
        "defaultMode": "auto"
      },
      "enabledPlugins": {
        "swift-lsp@claude-plugins-official": true,
        "context7@claude-plugins-official": true
      },
      "language": "Russian",
      "theme": "dark",
      "skipAutoPermissionPrompt": true
    }
    

    на порту 8118 запущен privoxy, который тунелирует трафик в нидерландский socks-5 прокси (мне так проще, можно запустить прямо на иностранном серваке http(s)-прокси сервер, наверное)

    работает и консольный и desktop клиент. только одно но - впн всё равно надо включить для запуска десктоп-клиента, видно какой-то трафик всё равно ходит в обход указанного в settings.json прокси


    1. efreelancer Автор
      06.07.2026 04:17

      settings.json это первое что я попробовал, однако, это настройки только для моделей, но проверка страны тут не работает.

      только одно но - впн всё равно надо включить для запуска десктоп-клиента

      Вот моё решение как-раз обходит эту проблему.


  1. Bardakan
    06.07.2026 04:17

    а ни у кого из присутствующих случайно не возникало проблем с одновременной установкой claude code и opencode?


    1. efreelancer Автор
      06.07.2026 04:17

      У меня проблем с этим не возникало, скажу даже больше, у меня на ноуте и агентном сервер установлены сразу codex, claudecode, cursor, coddy и opencode. А какие проблемы возникают?