Терминал
Терминал Mobile SSH создан для работы на телефоне и планшете. Он сочетает холст терминала, ряд дополнительных клавиш, панели нескольких сессий, обработку прокрутки и поведение переподключения.
Основы терминала
- Терминал использует поведение в стиле xterm с поддержкой цвета и обработкой клавиш курсора.
- Буфер прокрутки по умолчанию хранит 5000 строк, а в настройках его можно задать равным 1 000, 10 000 или 50 000 строк.
- Нажмите на панель, чтобы выбрать её перед вводом.
- Сведите пальцы на панели терминала, чтобы изменить размер текста. Mobile SSH меняет размер удалённого PTY после завершения жеста.
- Дважды нажмите на панель (или используйте её кнопку разворачивания), чтобы перейти в полноэкранный режим. Используйте «Назад» на Android или кнопку сворачивания на iOS, чтобы вернуться к сетке.
Сетка нескольких сессий
Mobile SSH может одновременно выполнять до восьми SSH-сессий. Каждая сессия отображается как панель в сетке терминалов. Нажмите на панель, чтобы выбрать её, или используйте + Add Session, чтобы начать другое подключение.
Заголовок панели показывает, где вы находитесь. На Android он отображает настоящий рабочий каталог панели, запрошенный у tmux или переданный оболочкой через OSC 7 и обновляемый, пока приложение открыто; на iOS он показывает заголовок, который задаёт удалённая сторона, а если его нет — user@host:port.
Закрытие панели отключает эту SSH-сессию. При возврате на стартовый экран активные сессии остаются доступными через Active Sessions.
Eternal Terminal (ET)
Каждый сохранённый сервер может использовать один из двух транспортов, выбираемых переключателем Transport при добавлении или редактировании сервера:
- SSH — обычное SSH-подключение (по умолчанию).
- Eternal Terminal — устойчивая сессия, которая переживает обрывы сети, спящий режим устройства и смену IP-адреса без перезапуска вашей оболочки.
ET держит сессию живой на сервере, поэтому, когда телефон меняет сеть или выходит из спящего режима, Mobile SSH снова подключается к той же работающей оболочке, а не открывает новую. Это удобно при мобильном интернете, переходах между Wi-Fi и сотовой сетью и долго выполняющихся командах.
ET требует процесса etserver на хосте. Если его на сервере нет, Mobile SSH может установить и запустить его за вас по уже открытому SSH-подключению — ручная настройка сервера не нужна. Как только ET доступен, подключайтесь с выбранным транспортом Eternal Terminal.
Ряд дополнительных клавиш
Обе платформы держат под рукой ряд из тринадцати терминальных клавиш — тех, что неудобны или отсутствуют на сенсорной клавиатуре. На Android это полоса внизу сессии (она скрывается сама, когда подключена аппаратная клавиатура); на iOS она едет над программной клавиатурой.
Два набора по умолчанию одного размера, но не одинаковые:
| Android | iOS | |
|---|---|---|
| По умолчанию | ESC TAB CTRL стрелки HOME PGUP END PGDN ⌫ ⌨ | ESC TAB CTRL ⇧ стрелки HOME END PGUP PGDN ⌨ |
| Различие | есть Backspace, нет Shift | есть залипающий Shift, нет Backspace |
Ряд никогда не прокручивается. Когда клавиши перестают помещаться по ширине, они делят место поровну и переносятся на вторую строку; всё, что не влезло и туда, убирается в меню переполнения ⋯. Ничего не прячется за свайпом и не обрезается краем экрана, а взведённый модификатор применяется и к клавише, выбранной из меню переполнения.
CTRL работает как залипающий модификатор: нажмите CTRL, затем введите C, чтобы отправить Ctrl-C. Shift на iOS «залипает» сильнее, чем на Android: на iOS он ещё и переводит в верхний регистр следующий символ, набранный на программной клавиатуре, тогда как на Android он действует только на клавиши самого ряда (Shift+Tab, Shift+стрелки).
Удерживайте клавишу вроде стрелки или PGDN — и она начнёт повторяться.
Поведение клавиатуры
Терминал использует прямое подключение к экранной клавиатуре без обработки: каждый символ отправляется в удалённую оболочку по мере набора, а автокоррекция и предиктивные подсказки отключены, поэтому клавиатура никогда не переписывает ввод до того, как он достигнет оболочки. Благодаря этому Vim, tmux, htop, less, оболочки с необычными сочетаниями клавиш и удалённые запросы паролей ведут себя предсказуемо — отключать буфер подсказок не нужно, его попросту нет.
- Показывать клавиатуру по касанию терминала: когда включено, касание терминала просит систему показать экранную клавиатуру.
Голосовой ввод с экранной клавиатуры по-прежнему работает: продиктованный текст передаётся прямо в оболочку, как и любой другой набранный ввод.
Аппаратные клавиатуры
Внешние и Bluetooth-клавиатуры управляют терминалом напрямую и на Android, и на iOS. Помимо обычных символов, Mobile SSH обрабатывает клавиши со стрелками, Home/End, PgUp/PgDn, Insert, Delete, Esc, функциональные клавиши F1–F12, сочетания Ctrl+клавиша и Alt/Option в роли Meta, а также Shift+Tab. Клавиши-модификаторы сочетаются с залипающими модификаторами из ряда дополнительных клавиш.
Вставка
Вставка в программу, которая её запрашивает (bash, Vim и другие приложения с поддержкой bracketed paste), оборачивается маркерами bracketed paste, поэтому многострочное содержимое буфера обмена вставляется как текст, а не выполняется автоматически строка за строкой. Оборачиваются только настоящие вставки; набранный и продиктованный текст остаётся нетронутым.
Выделение, копирование, отправка
Долгое нажатие внутри терминала выделяет слово под пальцем, затем перетаскивайте маркеры для корректировки. Панель инструментов выделения предлагает три действия:
- Copy — поместить выделенный текст в системный буфер обмена. Выделение остаётся подсвеченным после этого, поэтому им можно поделиться, скопировать снова или расширить.
- Share — передать выделенный текст в системное меню «Поделиться» (почта, заметки, мессенджеры и т. д.).
- Select all — расширить выделение на весь видимый буфер терминала, затем Copy или Share.
Поиск по терминалу
Ищите по всему буферу терминала — по буферу прокрутки и по видимому экрану — с переходом между совпадениями. Откройте поиск из элементов управления терминала, введите запрос и переходите по найденным вхождениям. Это работает и на Android, и на iOS.
Цвет, курсив и удалённый буфер обмена
- Терминал отображает 24-bit true color и курсив, поэтому тематические приглашения, подсветка синтаксиса и TUI выглядят так же, как на десктопе.
- Буфер обмена OSC 52: когда удалённая программа копирует текст (tmux
set-clipboard, копирование через OSC 52 в Vim/Neovim), он попадает в буфер обмена вашего телефона — так что можно скопировать на сервере и вставить в локальное приложение. - И на Android, и на iOS широкие символы CJK, эмодзи и комбинирующие символы (кластеры графем и zero-width joiner) измеряются и отрисовываются правильно, и встроенный Nerd Font отрисовывает глифы powerline, starship, devicon и иконок Material Design, которые системный шрифт иначе показал бы пустыми квадратами.
Интеграция с оболочкой и встроенные изображения
- Интеграция с оболочкой (OSC 133): когда ваша оболочка выдаёт маркеры приглашений OSC 133, Mobile SSH может переходить между приглашениями и оповещать вас о завершении долгой команды. Работает на Android и iOS. Ни одно из приложений не подставляет маркеры само — их должна выдавать ваша оболочка (хук
PROMPT_COMMAND/precmdили starship). На Android переход между приглашениями выключен, пока вы не включите его в Settings → Shell integration; на iOS меню появляется само, как только маркеры начинают приходить. - Выделение вывода: коснитесь любого места внутри вывода команды и выделите этот блок целиком — например, ошибку сборки, оставшуюся 300 строк назад, а не только последнюю команду, — затем скопируйте его, отправьте или расширьте выделение.
- Встроенные изображения: программы, использующие протокол Kitty graphics, отрисовывают изображения прямо в терминале, на Android и iOS. Изображения переживают масштабирование щипком и перенос строк: их размер измеряется в ячейках, и они следуют за своей строкой, а не пропадают, оставляя пустое место. Это возможность основного экрана: когда управление берёт полноэкранный TUI, изображения очищаются.
- Мозаичные глифы (Android): блочные, брайлевские, секстантные и октантные символы приложение рисует само, а не запрашивает у шрифта, поэтому
chafa,timgи ANSI-графика заполняют сетку точно — без швов и пустых квадратов, каким бы шрифт вы ни выбрали. - Настоящий рабочий каталог (Android): заголовок панели показывает, где панель находится на самом деле — этот путь запрашивается у tmux или передаётся оболочкой через OSC 7, а не берётся из того, что напечаталось в последнем приглашении.
Оформление и клавиши
И на Android, и на iOS раздел Settings позволяет настроить терминал:
- Шрифт: выберите системный моноширинный шрифт, JetBrains Mono или Source Code Pro.
- Цветовая схема: Default, Solarized Dark или Light, Gruvbox, Dracula или Nord — применяется на лету к открытым панелям.
- Дополнительный ряд клавиш: добавляйте, удаляйте, переупорядочивайте и скрывайте клавиши, задавайте собственные клавиши с escape-последовательностями и сбрасывайте к значениям по умолчанию, с предпросмотром в реальном времени, показывающим, как именно ряд разобьётся на строки. На Android это вкладка Keys; на iOS — Extra keys → Customize keys.
- Добавление из заготовок: палитра примерно из 45 клавиш в шести группах —
F1–F12, сочетания с Ctrl вроде^C^D^Z^R^L, символы|~/_:и модификаторы.F1–F12отправляются как обычные escape-последовательности, поэтому сочетание сFNим не нужно. На Android есть ещё клавиша 📎 Attach a file, которая открывает файловый выбор и загружает файл в живую сессию; на iOS естьINS,DELи клавишаFN, открывающая ряд цифр. - Размер буфера прокрутки: 1 000, 5 000, 10 000 или 50 000 строк (по умолчанию 5 000). Применяется к новым панелям.
- Размер текста: ползунок, наряду с масштабированием щипком.
- Тема: системная, светлая или тёмная — для всего приложения.
Сброс восстанавливает значения по умолчанию из текущей версии приложения, а не замораживает сегодняшний список, поэтому улучшения из будущих выпусков до вас всё равно дойдут. Изменения применяются на лету к уже открытым панелям.
Прокрутка
Mobile SSH направляет жесты прокрутки в зависимости от состояния терминала:
- При обычном выводе оболочки свайп прокручивает локальный буфер прокрутки.
- В терминальных приложениях с режимом мыши прокрутка отправляет escape-последовательности колеса мыши.
- В приложениях с альтернативным экраном без режима мыши, таких как многие сессии tmux, прокрутка входит в режим копирования tmux и отправляет команды построчной прокрутки.
На Android касание внутри программы, отслеживающей мышь, передаётся как щелчок левой кнопкой по соответствующей ячейке, поэтому htop, vim и панели с выбором по щелчку отзываются на палец. На iOS касание в такой же программе поднимает клавиатуру, а не выполняет щелчок; передаётся только прокрутка колесом.
Если вы начнёте печатать в режиме прокрутки назад, Mobile SSH вернётся к «живому» виду терминала.
Поведение tmux
Mobile SSH отслеживает исходящие команды tmux attach и new-session, например:
tmux attach -t work
tmux a -t work
tmux new -A -s work
Когда соединение обрывается во время работы в tmux, приложение может запомнить имя последней сессии tmux для этого сервера и попытаться переподключиться к ней после восстановления связи. Если явное имя сессии не было замечено, но приложение знает, что вы были в tmux-подобной сессии с альтернативным экраном, оно может попробовать обычное tmux attach.
Это поведение работает по принципу «насколько возможно». Если удалённая сессия tmux больше не существует, удалённая оболочка остаётся доступной.
Менеджер tmux
В Mobile SSH встроен менеджер tmux, позволяющий просматривать tmux и управлять им без набора префиксных сочетаний. Откройте его кнопкой Tmux из подключённой сессии. Он показывает три раздела:
- Sessions — все сессии tmux на сервере.
- Windows — окна выбранной сессии.
- Panes — панели выбранного окна.
Из менеджера вы можете:
- Attach — подключить сессию к текущему терминалу.
- Create — создать новую сессию или окно, а также rename — переименовать их.
- Split — разделить панель по горизонтали или вертикали, zoom — увеличить панель и kill — завершить сессии, окна или панели.
- Sort — отсортировать сессии по имени или дате создания.
Значок 🔔 отмечает сессию, чей агент ожидает ввода, — так вы с одного взгляда замечаете приостановленный запуск Claude Code или Codex и подключаетесь к нему. Это дополняет подсказки по reattach выше: логика reattach автоматически восстанавливает вашу последнюю сессию при переподключении, а менеджер даёт полный ручной контроль.
Обе платформы также умеют управлять несколькими серверами tmux (сокетами) на одном хосте и сортировать сессии по имени или дате создания.
Herdr и Zellij (Android)
На Android та же идея реализована ещё для двух мультиплексоров. У каждого свой значок на панели инструментов, причём значок появляется только после того, как приложение действительно нашло эту программу на сервере, — так панель инструментов сама подсказывает, что установлено на сервере, без запуска which.
- Herdr использует собственный словарь: сессии, рабочие пространства, вкладки, панели. У каждой панели виден статус её агента — работает, ждёт вас, простаивает, — и заблокированному агенту можно ответить прямо из списка. Собственный статус herdr питает значок агентов в приложении, поэтому это работает и без установленного на сервере хука.
- Zellij показывает сессии, вкладки и панели с действиями attach, rename, kill и split. Завершённые сессии остаются в списке, поэтому подключение к ним их воскрешает, а удаление забывает их окончательно. Подробности по вкладкам и панелям требуют Zellij 0.44 или новее; на более старой версии страница показывает имена вкладок и объясняет, почему остального нет. Разделение требует клиента, подключённого к сессии, и страница объясняет это, вместо того чтобы предлагать кнопку, которая не сработает.
Если herdr или Zellij установлен, но отсутствует в PATH оболочки входа, страница предложит его туда добавить.
У каждого сохранённого сервера есть настройка Attach on connect: Auto (detect), Nothing, tmux, herdr или Zellij. Режим Auto выбирает то, чем вы последний раз пользовались на этом сервере, затем то, где есть живые сессии, затем то, что установлено, — а пока сервер ещё не опрошен, ни к чему не подключается, вместо того чтобы гадать.
Приложение для iOS сегодня работает только с tmux.
Уведомления агентов
Mobile SSH сообщает вам, когда удалённый ИИ-агент для кодинга — Claude Code, Codex, Gemini — заблокирован и ждёт вас. Он не гадает, вчитываясь в вывод вашего терминала. Есть два пути, и они работают с разной степенью подробности.
Звонок
Из коробки терминальный звонок из сессии, за которой вы не следите, поднимает уведомление — как и escape-последовательности уведомлений рабочего стола (OSC 9, OSC 777), которые многие инструменты и так отправляют. Звонки, пришедшие сразу после вашего ввода, игнорируются, поэтому обычный шум автодополнения оболочки вас не дёргает.
Настройка для этого не нужна, но приложение знает лишь то, что что-то прозвенело.
Хук агента
Чтобы приложение знало, какой агент ждёт и чем он занят, установите на сервер хук агента:
- iOS: Settings → Agent alerts → Install Agent Hook. Если подключено несколько серверов, приложение спросит, на какой.
- Android: долгое нажатие на заголовок панели сессии и выбор Install agent hooks.
Это записывает небольшой shell-скрипт в ~/.mobile-ssh/agent-hook.sh на этом сервере. Он не привязан к конкретному агенту — принимает аргументы командной строки, а не разбирает формат какого-то одного поставщика, — поэтому отчитываться через него может всё, что умеет запускать команды. Удаление файла — это чистая деинсталляция.
Как только агент отчитывается через хук:
- В заголовке панели появляется
claude · needs youили название инструмента, который он запускает. - Панель с заблокированным агентом получает янтарную рамку. Панель, на которую вы и так смотрите, не трогается — запрос и без того перед вами.
- Значок на панели инструментов считает агентов, ожидающих во всех подключениях, с ограничением до
9+. - Экран Agents перечисляет всех агентов во всех подключениях с указанием, чем они заняты и сколько уже ждут.
Ответ без набора текста
Когда агент задаёт вопрос с фиксированным набором ответов, приложение показывает в списке Agents по кнопке на каждый вариант — до шести. На Android можно также коснуться чипа агента в заголовке панели.
Ваш ответ не печатается в сессию. Он записывается в файл по отдельному каналу и подхватывается хуком, поэтому ответ не может испортить то, что у вас на экране. Приложение отказывается отправлять вариант, которого запрос на самом деле не предлагал, и прямо сообщает, если соединение к этому моменту оборвалось, а не проваливается молча.
Настройки
Уведомления включены по умолчанию на обеих платформах, с отдельными переключателями для самого уведомления, звука, вибрации и того, должна ли уведомлять сессия, которую вы сейчас просматриваете.
Об одном значении по умолчанию стоит знать: звук ограничен наушниками. Если ничего не подключено и не сопряжено, уведомление придёт и телефон завибрирует, но звук не прозвучит. Отключите этот параметр, если хотите слышать уведомление через динамик телефона.
Настройки чувствительности нет, выбора звука тоже — все элементы управления это просто «включено/выключено».
Полноэкранные терминальные программы
Для программ, таких как Vim, less, htop, инструменты ncurses и панели tmux:
- Ввод передаётся прямо в программу — здесь нет ни автокоррекции, ни буфера подсказок, которые могли бы помешать.
- Используйте ряд дополнительных клавиш для
ESC, стрелок,PGUPиPGDN. - Используйте масштабирование сведением пальцев, если текст слишком мелкий, затем немного подождите, пока размер удалённого терминала установится.