Архив рубрики ~Лента новостей~

Claude Desktop на Linux, через прокси

Claude Desktop на Linux, через прокси

Я сижу на 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 c806f107543b84239dee57baa0b42560

Дальше обновления будут прилетать штатно вместе с 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[@]}» «$@» 39c73fd18fe0310e78a8f3a9dab8fa5f

Пара слов про содержимое. Скрипт намеренно простой, добавляет два флага и запускает бинарник. —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 fba157b6f6c058b547fbb2778ee41b92

Правка 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 2c887c079b92c2eb0ae7f3f2f3ede7b3

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

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

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

Проверка

Полностью выходим из 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 модельки, серверы, агентов и прочие радости жизни.

Источник: habr.com

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Коротко из Telegram~ AGI оказался типичным сеньором: GPT-6 Astra не смогла написать бота… Архив рубрики ~Коротко из Telegram~ Рекомендации успевают за сменой интересов пользователей — Яндекс выложил в… Архив рубрики ~Полезное~ Выкатили Nano Banana 2.1 — мощный апдейт для генерации и… Архив рубрики ~Полезное~ Приложения Яндекса с Алисой AI вошли в топ-15 мобильных ИИ-приложений… Архив рубрики ~Полезное~ Сбер выкатил Kandinsky 6.0 Video — новая линейка нейронок теперь… Архив рубрики ~Полезное~ Генерим видосы на видеокарте с 8 ГБ памяти — разрабы… Архив рубрики ~Полезное~ Нанимаем бесплатных ИИ-коллег: вышел OpenDots — открытый аналог Dots от… Архив рубрики ~Коротко из Telegram~ Wikimedia Foundation обнаружила следы несанкционированной активности агентов OpenAI Фонд сообщил,… Архив рубрики ~Полезное~ DeepSeek выкатили десктопный Harness для macOS и Windows — опенсорсный… Архив рубрики ~Коротко из Telegram~ Длинное тире больше не работает как маркер ИИ-текста: исследователи нашли… Архив рубрики ~Полезное~ Google отправили четыре TPU в космос Прототип Project Suncatcher вышел… Архив рубрики ~Полезное~ Учим нейронки писать понятнее — Андрей Карпаты поделился лайфхаками, как… Архив рубрики ~Коротко из Telegram~ Apple закрыла уязвимость связанную с функционалом Airlift в iOS 27.2… Архив рубрики ~Коротко из Telegram~ Apple выпускает третьи бета-версии следующих систем для разработчиков: • iOS… Архив рубрики ~Коротко из Telegram~ AGI оказался типичным сеньором: GPT-6 Astra не смогла написать бота… Архив рубрики ~Коротко из Telegram~ Рекомендации успевают за сменой интересов пользователей — Яндекс выложил в… Архив рубрики ~Полезное~ Выкатили Nano Banana 2.1 — мощный апдейт для генерации и… Архив рубрики ~Полезное~ Приложения Яндекса с Алисой AI вошли в топ-15 мобильных ИИ-приложений… Архив рубрики ~Полезное~ Сбер выкатил Kandinsky 6.0 Video — новая линейка нейронок теперь… Архив рубрики ~Полезное~ Генерим видосы на видеокарте с 8 ГБ памяти — разрабы… Архив рубрики ~Полезное~ Нанимаем бесплатных ИИ-коллег: вышел OpenDots — открытый аналог Dots от… Архив рубрики ~Коротко из Telegram~ Wikimedia Foundation обнаружила следы несанкционированной активности агентов OpenAI Фонд сообщил,… Архив рубрики ~Полезное~ DeepSeek выкатили десктопный Harness для macOS и Windows — опенсорсный… Архив рубрики ~Коротко из Telegram~ Длинное тире больше не работает как маркер ИИ-текста: исследователи нашли… Архив рубрики ~Полезное~ Google отправили четыре TPU в космос Прототип Project Suncatcher вышел… Архив рубрики ~Полезное~ Учим нейронки писать понятнее — Андрей Карпаты поделился лайфхаками, как… Архив рубрики ~Коротко из Telegram~ Apple закрыла уязвимость связанную с функционалом Airlift в iOS 27.2… Архив рубрики ~Коротко из Telegram~ Apple выпускает третьи бета-версии следующих систем для разработчиков: • iOS…

Оставить комментарий