Назад к обновлениям
UpdatedSep 3, 2026

terminalphone — Updated!

Зашифрованная голосовая связь (нажми и говори) и текстовая коммуникация через скрытые сервисы Tor со сквозным шифрованием, настраиваемыми шифрами, релейным режимом для групповых вызовов и анти-криминалистическим уничтожением данных.

Поделиться

TerminalPhone

Зашифрованная голосовая связь в режиме push-to-talk через скрытые сервисы Tor.

TerminalPhone — это единый самодостаточный Bash-скрипт, обеспечивающий анонимную сквозную шифрованную голосовую и текстовую связь между двумя или более сторонами через сеть Tor. Он работает как рация: вы записываете голосовое сообщение, и оно сжимается, шифруется и передаётся удалённой стороне как единое целое. Вы также можете отправлять зашифрованные текстовые сообщения во время вызова. Никакой серверной инфраструктуры, никаких аккаунтов, никаких телефонных номеров. Ваш .onion-адрес скрытого сервиса Tor — это ваша личность.


Содержание


Возможности

  • Режим рации push-to-talk -- Запишите полное голосовое сообщение и передайте его при отпускании.
  • Зашифрованный чат во время вызова -- Отправляйте и получайте зашифрованные текстовые сообщения во время вызова. Нажмите T, чтобы ввести сообщение.
  • Определитель вызывающего -- Обе стороны автоматически обмениваются .onion-адресами при подключении. Удалённый адрес отображается в заголовке вызова.
  • Автоопределение завершения вызова -- Когда одна сторона завершает вызов, другая немедленно уведомляется, и вызов автоматически заканчивается.
  • Настраиваемый шифр -- Выбор из 21 отобранного шифра, ранжированного по стойкости (256-бит → 128-бит). Включает семейства AES, ChaCha20, Camellia и ARIA. Слабые шифры (DES, RC4, режимы ECB) исключены.
  • Согласование шифра в реальном времени -- Обе стороны обмениваются информацией о шифре при подключении. Заголовок вызова показывает как локальный, так и удалённый шифр с зелёными (совпадение) или красными (несовпадение) индикаторами, обновляемыми в реальном времени.
  • Настройки во время вызова -- Нажмите S во время вызова для доступа к настройкам. Меняйте шифр на лету; отображение у удалённой стороны обновляется автоматически.
  • Информация о мосте Snowflake -- При использовании Snowflake для обхода цензуры страница вызова отображает имя дескриптора моста, отпечаток и статус транспортного соединения, разобранные из логов Tor.
  • Авто-прослушивание -- При включении фоновый слушатель запускается автоматически при загрузке Tor. Входящие вызовы обнаруживаются и принимаются из главного меню без необходимости вручную выбирать «Слушать вызовы». После завершения вызова слушатель перезапускается.
  • Настраиваемая клавиша PTT -- Измените клавишу push-to-talk с пробела по умолчанию на любую другую через меню настроек.
  • Статистика сообщений -- Экран вызова отображает размер зашифрованной полезной нагрузки для отправленных и полученных сообщений, обновляемый на месте.
  • Удалённый статус PTT -- Экран вызова показывает статический индикатор состояния удалённой стороны: «Idle» (зелёный) или «● Recording» (красный). Сбрасывается немедленно при поступлении аудиоданных, до начала воспроизведения.
  • Звуковой сигнал PTT -- Опциональный звук уведомления, когда удалённая сторона начинает запись. Пять встроенных пресетов (tone, double, chirp, ding, click), генерируемых с помощью sox, плюс возможность записать собственный 2-секундный сигнал. Настраивается через Настройки.
  • Анимация подключения -- При вызове удалённого адреса воспроизводится циклическая анимация до загрузки интерфейса вызова.
  • Изменение голоса -- Применяйте голосовые эффекты к исходящему аудио. Включает 6 пресетов (deep, high, robot, echo, whisper) и полностью настраиваемый пользовательский режим с изменением высоты тона, overdrive, flanger, echo, фильтром высоких частот и тремоло. Эффекты обрабатываются с помощью sox перед кодированием Opus.
  • Громкость PTT (Termux) -- Экспериментальный режим, позволяющий двойным нажатием кнопки уменьшения громкости переключать запись, даже когда Termux находится в фоне. Требуется jq (устанавливается по требованию). Громкость автоматически восстанавливается после каждого срабатывания.
  • Скрытый сервис Tor -- Каждый экземпляр запускает собственный скрытый сервис Tor. Ваш .onion-адрес служит постоянной, маршрутизируемой конечной точкой. Не требуется проброс портов или публичный IP.
  • Сквозное шифрование -- Всё аудио и текст шифруются с использованием настраиваемого шифра (по умолчанию: AES-256-CBC) с выводом ключа PBKDF2 из предварительно общего секрета перед попаданием в сеть Tor.
  • Защищённый парольной фразой секрет -- Общий секрет может быть зашифрован при хранении с использованием выбранной пользователем парольной фразы (AES-256-CBC, 100 000 итераций PBKDF2). Существующие секреты в открытом виде автоматически обнаруживаются с предложением миграции.
  • Низкая пропускная способность -- Кодек Opus на 16 кбит/с, 8 кГц моно. Типичное 10-секундное голосовое сообщение занимает менее 20 КБ, что вполне укладывается в возможности Tor.
  • Обмен QR-кодами -- Пункт 3 может отобразить ваш .onion-адрес в виде сканируемого QR-кода в терминале. Если qrencode не установлен, вам будет предложено его установить. QR-код отображается на альтернативном экранном буфере и уничтожается при закрытии. Примечание предупреждает, что некоторые QR-сканеры автоматически добавляют префикс http://; этот префикс автоматически удаляется при наборе.
  • Непрозрачные временные файлы -- Все временные файлы используют общие расширения .tmp и случайные шестнадцатеричные идентификаторы. Никакие метаданные о типе файла или времени не утекают в файловую систему.
  • Отображение цепочки узлов -- Опциональное отображение вашего пути по цепочке Tor во время вызовов с показом имён реле и полных названий стран. Автообновление каждые 60 секунд. Настраивается через Настройки → Настройки Tor.
  • Исключение стран -- Исключайте определённые страны из ваших цепочек Tor. Пресеты для альянсов Five Eyes, Nine Eyes и Fourteen Eyes или ввод пользовательских кодов стран. Использует ExcludeNodes с StrictNodes в torrc.
  • Аутентификация протокола HMAC -- Опциональная подпись HMAC-SHA256 всех сообщений протокола (голос, текст, управляющие сигналы) с использованием общего секрета. В каждое сообщение включается случайный nonce, а увиденные nonce отслеживаются для отклонения повторов. Неподписанные, поддельные или повторно воспроизведённые сообщения молча отбрасываются. Состояние HMAC фиксируется в начале вызова для предотвращения рассинхронизации во время вызова. Настраивается через Настройки → Безопасность.
  • Перезапись перед удалением -- Опциональный переключатель в Настройки → Безопасность, который перезаписывает каждый временный файл случайными данными из /dev/urandom перед удалением. Считывается размер файла, поверх файла записывается соответствующее количество байт случайных данных с помощью dd с conv=notrunc, запись сбрасывается на устройство хранения с помощью sync, а затем файл удаляется с помощью rm. Охватывает все конфиденциальные файлы времени выполнения: необработанные записи PCM, аудио, закодированное в Opus, зашифрованные полезные нагрузки, расшифрованное входящее аудио и чат, промежуточные файлы голосовых эффектов, материал ключей шифра и HMAC, журналы nonce, флаги сессии, PID-файлы, именованные каналы, ключи скрытого сервиса Tor при ротации и данные сессии реле. Для каталогов все файлы внутри перезаписываются рекурсивно. Встроенный тестовый пункт создаёт образец файла, показывает исходное содержимое в открытом виде и в hex, перезаписывает его и отображает перезаписанный hex, чтобы пользователь мог визуально убедиться в уничтожении данных. По умолчанию выключено — для большинства пользователей стандартного rm вполне достаточно. Временные файлы TerminalPhone малы и недолговечны, а дисковое пространство обычно быстро переиспользуется обычной системной активностью. Эта функция предназначена для пользователей, желающих получить дополнительный уровень защиты от криминалистического восстановления. Примечание: на SSD и флеш-накопителях выравнивание износа означает, что перезапись может попасть на другие физические ячейки NAND — полнодисковое шифрование является единственной надёжной защитой на флеш-носителях. На традиционных HDD перезапись заменяет данные в том же физическом месте и эффективна против всех программных методов восстановления.
  • Режим реле (групповой мост) -- Запустите реле с нулевым знанием, которое соединяет N анонимных вызывающих. Реле пересылает зашифрованное аудио и чат без расшифровки, не требует общего секрета или аудиооборудования. Клиенты автоматически определяют режим реле через рукопожатие RELAY:1 и отображают количество участников группы в реальном времени. Уход одного вызывающего не отключает остальных. Панель оператора показывает количество вызывающих, время работы и пропускную способность данных.
  • Режим Tor с одним узлом -- Опциональный режим с пониженной задержкой для операторов реле. Использует 1 узел Tor вместо 3 для скрытого сервиса, жертвуя анонимностью сервера ради меньшей задержки. Идеально для операторов реле, которым не нужно скрывать собственный IP.
  • Конфигурация портов -- Настройте порт прослушивания и порт SOCKS вместе через Настройки → Настройки Tor. Позволяет запускать несколько экземпляров на одном устройстве с отдельными процессами Tor. В первую очередь полезно для операторов реле, которые также хотят присоединиться к собственному групповому вызову — запустите реле на одном экземпляре, измените порт SOCKS на втором экземпляре и подключитесь как вызывающий.
  • Кроссплатформенность -- Работает на стандартных дистрибутивах Linux, macOS и Android через Termux. Платформозависимые аудиобэкенды обрабатываются прозрачно.
  • Не требует root -- Ввод PTT использует необработанный режим терминала. Не требуются специальные разрешения или модули ядра.
  • Единый скрипт -- Один файл Bash. Никакой системы сборки, никакой среды выполнения, никакого фреймворка.

Установка

Linux

Поддерживаемые дистрибутивы: Debian/Ubuntu (apt), Fedora/RHEL (dnf), Arch (pacman).``` bash

git clone https://gitlab.com/here_forawhile/terminalphone.git cd terminalphone bash terminalphone.sh

Выберите пункт **7** в меню, чтобы автоматически установить все зависимости. Будут установлены следующие пакеты:

| Пакет | Назначение |
|---|---|
| `tor` | Луковая маршрутизация и скрытый сервис |
| `opus-tools` | Сжатие голоса (кодек Opus) |
| `sox` | Утилиты обработки звука |
| `socat` | Двунаправленный TCP-ретранслятор через SOCKS-прокси Tor |
| `openssl` | Шифрование и дешифрование AES-256-CBC |
| `alsa-utils` | Запись и воспроизведение звука (`arecord`, `aplay`) |

### macOS``` bash

git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh

Выберите пункт 7, чтобы установить все зависимости автоматически. Если Homebrew не установлен, скрипт сначала установит его, а затем установит следующие пакеты:

ПакетНазначение
torЛуковая маршрутизация и скрытый сервис
opus-toolsСжатие голоса (кодек Opus)
soxЗапись и воспроизведение звука (rec, play)
socatДвунаправленный TCP-ретранслятор через SOCKS-прокси Tor
opensslШифрование и дешифрование AES-256-CBC

Примечание: В macOS для записи (rec) и воспроизведения (play) используется sox вместо ALSA. Дополнительные аудиопакеты не требуются.

Apple Silicon (M1/M2/M3+): Если ваш терминал случайно работает под Rosetta 2 (процесс x86_64), а Homebrew установлен в нативном ARM-префиксе (/opt/homebrew), то brew install обычно завершается ошибкой Cannot install under Rosetta 2 in ARM default prefix. Установщик зависимостей теперь обнаруживает это и автоматически перезапускает Homebrew под arch -arm64, поэтому пункт 7 работает независимо от того, как был запущен скрипт.

Termux (Android)

TerminalPhone поддерживает устройства Android через Termux. Из-за песочницы аудиоархитектуры Android требуются два дополнительных компонента.

Шаг 1: Установите Termux

Установите Termux из F-Droid. Не используйте версию из Play Store, так как она устарела и больше не получает обновлений.

Шаг 2: Установите приложение Termux:API

Установите Termux:API из F-Droid. Это отдельное Android-приложение (не пакет Termux), которое обеспечивает связь между Termux и системными API Android. TerminalPhone требует его для доступа к микрофону устройства и воспроизведению медиа.

Без установленного на устройстве приложения Termux:API команды termux-microphone-record и termux-media-player не будут работать, а запись и воспроизведение звука будут завершаться без сообщений об ошибках.

После установки приложения Termux:API предоставьте ему разрешения на доступ к микрофону, когда появится соответствующий запрос.

Шаг 3: Установите пакет Termux:API внутри Termux```bash pkg install termux-api

Это устанавливает утилиты командной строки, которые взаимодействуют с приложением Termux:API.

**Шаг 4: Запуск TerminalPhone**```bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh

Выберите опцию 7, чтобы установить все оставшиеся зависимости. Установщик сначала запустит pkg upgrade для устранения проблем со связыванием пакетов, затем установит tor, opus-tools, sox, socat, openssl-tool, ffmpeg и termux-api.

Зависимости, специфичные для Termux:

ПакетНазначение
termux-apiCLI-мост к микрофону и медиаплееру Android
ffmpegПреобразует записи Android в формате M4A в необработанный PCM для кодирования Opus

Быстрый старт```

  1. Run: bash terminalphone.sh
  2. Install deps: Select option 7
  3. Start Tor: Select option 8 (wait for 100% bootstrap)
  4. Set shared secret: Select option 4 (both parties must use the same secret)
  5. Share your .onion address with the other party (option 3)

To receive a call: Select option 1 (Listen for calls) To make a call: Select option 2 (Call an onion address)

Обе стороны должны иметь запущенный Tor и одинаковый общий секрет, настроенный до начала вызова.

---

## Использование

### Параметры меню```
 1  Listen for calls          Wait for an incoming connection
 2  Call an onion address     Connect to a remote .onion endpoint
 3  Show my onion address     Display your .onion address (with optional QR code)
 4  Set shared secret         Configure the pre-shared encryption key
 5  Test audio (loopback)     Record and play back audio locally
 6  Show status               Display Tor, secret, and connection status
 7  Install dependencies      Install all required packages
 8  Start Tor                 Start the Tor process and hidden service
 9  Stop Tor                  Stop the Tor process
10  Restart Tor               Stop and restart Tor
11  Rotate onion address      Generate a new .onion address (destroys the old one)
12  Settings                  Configure Opus quality, PTT chime, Snowflake, auto-listen, PTT key, voice changer, security, Tor settings
13  Relay mode                Start a zero-knowledge group bridge for N callers
 0  Quit                      Stop Tor and exit

Управление во время вызова

Режим полного дуплекса (WebSockets):

КлавишаДействие
MВыключить / включить микрофон.
TОтправить зашифрованное текстовое сообщение во время вызова.
QЗавершить вызов и вернуться в меню.

Режим Push-to-Talk (Linux / macOS):

КлавишаДействие
Удерживать SPACEЗаписать голосовое сообщение. Отправляется автоматически при отпускании.
TОтправить зашифрованное текстовое сообщение.
SОткрыть настройки во время вызова (сменить шифр, настроить качество).
QЗавершить вызов и вернуться в меню.

Режим Push-to-Talk (Termux):

Программная клавиатура Android отправляет события клавиш при отпускании, а не при нажатии. TerminalPhone адаптируется, используя режим переключения в Termux.

КлавишаДействие
Нажать SPACEНачать запись. Нажать снова, чтобы остановить и отправить.
TОтправить зашифрованное текстовое сообщение.
SОткрыть настройки во время вызова (сменить шифр, настроить качество).
QЗавершить вызов и вернуться в меню.
Vol Down ×2Переключить запись кнопкой громкости (требуется включённая опция Volume PTT в настройках).

Режим CLI```bash

bash terminalphone.sh install # Install dependencies bash terminalphone.sh test # Audio loopback test bash terminalphone.sh status # Show status bash terminalphone.sh listen # Listen for incoming calls bash terminalphone.sh call ADDRESS # Call a .onion address bash terminalphone.sh relay # Start relay mode (group bridge)

---

## Как это работает

TerminalPhone использует модель «запись, затем отправка». Когда вы активируете PTT, микрофон записывает непрерывно до момента отпускания. Затем полная запись обрабатывается через следующий конвейер:```
SENDER                                          RECEIVER
──────                                          ────────
Microphone                                      Speaker
    │                                               ▲
    ▼                                               │
Raw PCM (8kHz, 16-bit, mono)                    Opus decode
    │                                               ▲
    ▼                                               │
Opus encode (16kbps)                            AES-256-CBC decrypt
    │                                               ▲
    ▼                                               │
AES-256-CBC encrypt                             Base64 decode
    │                                               ▲
    ▼                                               │
Base64 encode ──▶ socat ──▶ Tor ──▶ socat ──▶ Receive

Сетевой протокол представляет собой построчный текст поверх TCP-соединения:

СообщениеОписание
ID:<onion>Идентификатор вызывающего — .onion-адрес отправителя
CIPHER:<name>Шифр шифрования отправителя. Обменивается при подключении и при изменении.
PTT_STARTОтправитель начал запись
PTT_STOPОтправитель закончил; аудио следует или уже отправлено
AUDIO:<base64>Полное зашифрованное аудиосообщение
MSG:<base64>Зашифрованное текстовое сообщение
HANGUPОтправитель отключается
PINGСигнал поддержания соединения
RELAY:1Приветствие релея — отправляется релеем при подключении, запускает групповой режим
GROUP:<n>Обновление размера группы — широковещательно рассылается релеем, когда вызывающие присоединяются или покидают группу

В Termux дополнительный этап преобразования обрабатывает нативный формат записи Android M4A, используя ffmpeg для преобразования в необработанный PCM перед кодированием Opus.


Модель безопасности

Шифрование: Всё аудио шифруется с помощью настраиваемого пользователем шифра (по умолчанию: AES-256-CBC) перед передачей. Доступен 21 отобранный шифр, ранжированный от самого стойкого (256-бит) до достаточного (128-бит). Ключ выводится из предварительно разделённого секрета с использованием PBKDF2 с 10 000 итераций. Шифрование применяется на уровне приложения, независимо от транспортного шифрования Tor. Секреты передаются в OpenSSL через файловые дескрипторы (-pass fd:3), а не через аргументы командной строки, поэтому они никогда не отображаются в таблице процессов.

Согласование шифра: Обе стороны обмениваются именами шифров при подключении и всякий раз, когда шифр меняется во время вызова. Имена шифров не являются секретом (принцип Керкгоффса). Если локальный и удалённый шифры не совпадают, обе стороны видят красные индикаторы в заголовке вызова.

Транспорт: Все данные маршрутизируются через цепи скрытых сервисов Tor. IP-адрес ни одной из сторон не раскрывается. Трафика в открытой сети нет. Соединение не может быть приписано ни одной из сторон сетевым наблюдателем.

Устойчивость к анализу трафика: Модель «запись-затем-отправка» создаёт нерегулярные шаблоны передачи (сообщения переменной длины через нерегулярные интервалы), которые сложнее идентифицировать, чем непрерывный поток.

Аутентификация: Общий секрет служит неявной аутентификацией. Если у обеих сторон нет одного и того же секрета, расшифровка не удаётся и аудио не воспроизводится. При подключении обе стороны обмениваются .onion-адресами для идентификации вызывающего. Секрет может быть опционально зашифрован при хранении с помощью парольной фразы; при запуске скрипт запрашивает парольную фразу для его разблокировки.

Подписывание протокола HMAC (опционально): Когда включено, каждое сообщение сетевого протокола — включая управляющие сигналы, такие как HANGUP, PTT_START и PING — подписывается с помощью HMAC-SHA256, производного от общего секрета. В каждое сообщение включается случайный nonce, так что идентичные команды дают уникальные подписи. Просмотренные nonce отслеживаются для каждого вызова, а дубликаты отклоняются, что предотвращает атаки повторного воспроизведения. Настройка HMAC фиксируется в начале вызова через runtime-файл, так что пути отправки и приёма всегда согласованы, даже если настройка переключается во время вызова (изменения вступают в силу при следующем вызове). На принимающей стороне любое сообщение с недействительной, отсутствующей или повторно воспроизведённой подписью молча отбрасывается. Это не позволяет злоумышленнику, скомпрометировавшему цепь Tor (но не имеющему общего секрета), внедрять или повторно воспроизводить команды. Обе стороны должны включить HMAC, чтобы вызовы работали. Не совместимо с версиями до 1.1.3.

Ограничения:

  • Общий секрет должен быть передан внеполосно через защищённый канал (лично, через зашифрованные сообщения и т. д.).
  • Отсутствует прямая секретность. Если общий секрет скомпрометирован, все прошлые и будущие коммуникации с использованием этого секрета могут быть расшифрованы.
  • Протокол не защищает от скомпрометированной конечной точки. Если любое из устройств скомпрометировано, злоумышленник получает доступ к открытому аудио.

Безопасность режима релея: Релей архитектурно является zero-knowledge. Он никогда не обладает общим секретом и не может расшифровать какое-либо содержимое. Аудиоданные проходят через буферы ядерных каналов (FIFO), которые существуют только в памяти — ничего не записывается на диск. Когда релей останавливается, все временные файлы удаляются. Оператор релея не может определить, что было сказано, кто вызывающие, или прочитать какие-либо сообщения. Релей фильтрует все управляющие сигналы (HANGUP, ID:, CIPHER:, PTT_START, PTT_STOP) и пересылает только AUDIO:, MSG: и PING. Глобальный пассивный противник мог бы выполнить корреляционный анализ трафика, чтобы связать вызывающих с релеем, но содержимое сообщений остаётся непрозрачным.

Пропускная способность релея: Основное узкое место — пропускная способность Tor. Пропускная способность скрытого сервиса Tor сильно варьируется и зависит от качества цепи, перегрузки релея и географического расстояния. Типичное 10-секундное голосовое сообщение составляет ~20 КБ в зашифрованном виде, и каждая передача разветвляется на N-1 слушателей.

ВызывающиеИсходящий трафик на сообщениеОжидаемый опыт
2--320--40 КБНадёжно на большинстве соединений
3--540--80 КБХорошо на стабильных цепях, возможны задержки на мобильных данных
5--1080--180 КБНа пределе, заметные задержки между передачами
10+180 КБ+Ненадёжно, значительная очередь и возможная потеря сообщений

Реалистичная пропускная способность — 3--5 вызывающих для релея, работающего на телефоне (Termux), или 5--10 вызывающих на выделенной Linux-машине со стабильным соединением. Релеи, работающие на мобильных устройствах, сталкиваются с дополнительными ограничениями: мобильные данные добавляют задержку поверх Tor, Android может убивать фоновые процессы Termux для освобождения памяти, а расход батареи растёт с каждым подключённым вызывающим. Пропускная способность цепи Tor может варьироваться от 50 КБ/с до 500 КБ/с в зависимости от качества пути, и цепи могут деградировать или ротироваться в середине сессии. Режим одного перехода улучшает пропускную способность, но не устраняет перегрузку релеев Tor. Эти оценки предполагают модель PTT, где только один человек передаёт в данный момент — одновременные передачи ухудшили бы производительность ещё больше. Вызывающим в групповом вызове следует рассмотреть снижение битрейта Opus (Настройки → Кодирование Opus), чтобы уменьшить размеры сообщений и снизить нагрузку на релей.


Конфигурация

Вся конфигурация хранится в .terminalphone/ относительно расположения скрипта:``` .terminalphone/ tor_data/ Tor data directory and hidden service keys audio/ Temporary audio files (cleaned on exit) pids/ Process ID tracking shared_secret Encrypted shared secret file torrc Generated Tor configuration

Параметры аудио по умолчанию (определены в начале скрипта):

| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| `LISTEN_PORT` | 7777 | TCP-порт для входящих подключений |
| `TOR_SOCKS_PORT` | 9050 | Порт SOCKS-прокси Tor |
| `OPUS_BITRATE` | 16 | Битрейт кодирования Opus в кбит/с |
| `CIPHER` | aes-256-cbc | Шифр шифрования (настраивается через Settings) |
| `SNOWFLAKE_ENABLED` | 0 | Мост Snowflake для обхода цензуры |
| `AUTO_LISTEN` | 0 | Автоматическое ожидание вызовов при запуске Tor |
| `PTT_KEY` | SPACE | Клавиша push-to-talk (настраивается через Settings) |
| `VOL_PTT` | 0 | PTT по двойному нажатию кнопки уменьшения громкости, только Termux (экспериментально) |
| `EXCLUDE_NODES` | (пусто) | Список стран Tor ExcludeNodes (например, `{US},{GB}`) |
| `HMAC_AUTH` | 0 | HMAC-подпись всех протокольных сообщений (опционально, обе стороны должны совпадать) |
| `OVERWRITE_DELETE` | 0 | Перезапись временных файлов случайными данными перед удалением (по умолчанию выключено) |
| `PTT_CHIME` | off | Пресет звукового уведомления PTT (off, tone, double, chirp, ding, click, custom) |
| `SINGLE_HOP` | 0 | Режим односкачкового Tor для меньшей задержки (отключает анонимность сервера) |
| `SAMPLE_RATE` | 8000 | Частота дискретизации аудио в Гц |
| `CHUNK_DURATION` | 1 | Длительность тестовых аудиофрагментов в секундах |

---

## Устранение неполадок

**Tor не проходит bootstrap:**
Проверьте журнал Tor в `.terminalphone/tor_data/tor.log`. Распространённые причины включают рассинхронизацию часов, сетевые ограничения, блокирующие Tor, или другой экземпляр Tor, использующий тот же SOCKS-порт.

**Нет звука на Termux:**
Убедитесь, что приложение Termux:API установлено из F-Droid (а не только пакет `termux-api`). Предоставьте разрешения на микрофон приложению Termux:API в настройках Android. Запустите тест аудиопетли (опция 5) для проверки.

**Установка ffmpeg не удаётся на Termux:**
Выполните `pkg upgrade` перед установкой зависимостей. Установщик делает это автоматически, но если вы устанавливали пакеты вручную, устаревшие разделяемые библиотеки могут вызвать ошибки компоновки.

**Аудиотест работает, но вызовы беззвучны:**
Убедитесь, что обе стороны используют один и тот же общий секрет. Несовпадающие секреты приведут к ошибке расшифровки без сообщения об ошибке -- вызов подключается, но звук не слышен.

**Мост Snowflake медленно подключается:**
Snowflake маршрутизирует трафик через WebRTC-прокси, что добавляет дополнительное время на bootstrap. Нормально, что Tor занимает 30--60 секунд (или больше) для достижения 100% при включённом Snowflake. Скрипт будет отображать уведомление о необходимости подождать во время bootstrap.

**Первый bootstrap Tor медленный:**
При первом запуске Tor должен загрузить полный сетевой консенсус с нуля, что может занять минуту или две. Скрипт обнаруживает это и отображает уведомление. Тайм-аут bootstrap автоматически продлевается с 120 до 300 секунд при первом запуске. Последующие запуски используют кэшированные данные консенсуса и работают гораздо быстрее.

**Завершение вызова не возвращает в меню:**
Если скрипт зависает после нажатия Q, нажмите Ctrl+C, чтобы принудительно выполнить очистку и вернуться в оболочку.

**`Cannot install under Rosetta 2 in ARM default prefix` на macOS:**
Это происходит на Apple Silicon, когда терминал работает под Rosetta 2 (процесс `x86_64`), но Homebrew находится в нативном ARM-префиксе (`/opt/homebrew`). Установщик зависимостей (опция **7**) теперь обнаруживает это и автоматически перезапускает `brew` под `arch -arm64`. Если вы устанавливаете пакеты вручную, добавьте префикс самостоятельно: `arch -arm64 brew install <pkg>`. В качестве альтернативы запустите скрипт нативно с помощью `arch -arm64 bash terminalphone.sh`.

---

[MIRROR V1.0.0](https://bin.disroot.org/?e1356291b098cb75#FMQ4gxFwgdr3rjR1dpGS2csLmDPzDEkQW16fQ5P2Vt4y)

[MIRROR V1.0.1](https://bin.disroot.org/?d3bc0b8976113f58#AuUm4ev4vfeVmPyrh2KjAdhDP6WN4UX6yKQh9ERGD5Qt)

[MIRROR V1.0.2](https://bin.disroot.org/?6bc5b2fd046de1d7#G7TmnytrMeaM5AZYWth6BjjdqUb9RDf3K9erHUExKcGX)

[MIRROR V1.0.3](https://bin.disroot.org/?c5010f039e4693fd#Brp1w7LRQH9d5Ye5npZDPxNVR855SW9QUAk9cJaUuLYX)

[MIRROR V1.0.4](https://bin.disroot.org/?1831f6b78e349142#7zaAMVPNJL3MfbGJzjtm6cCPcvQftf4ULXupdne5dRKw)

[MIRROR V1.0.5](https://bin.disroot.org/?edfcfc844987ed03#56LuBbqbkfNDXfHpydyaB3VcWYhYenX18dtSvNumERY9)

[MIRROR V1.0.6](https://bin.disroot.org/?6c7b4774108b0c1c#GQPst46zjAYidndmNvytforX7MK2LyHanL4d829vVcv4)

[MIRROR V1.0.7](https://bin.disroot.org/?047003637623b4fa#EwmaysciDpiDkht8xV7ce3QcR9oxFXaxSikh4cLheXBB)

[MIRROR V1.0.8](https://bin.disroot.org/?06e38bd64e6fbdad#88MYs3dmq9rSMkmocpW3NYaaG4YfSdRCc9LJnEEzqGYp)

[MIRROR V1.0.9](https://bin.disroot.org/?950218a9a7c71c66#E7Z94VCGBZozrfXYhGwKyAdMeTxuavg92tA1pn2DbrrB)

[MIRROR V1.1.0](https://bin.disroot.org/?0b0da14f31521b3a#B1c23J8xFoZZKErvGG28PgbtfgtMUcDABWmQEoSZfXgh)

[MIRROR V1.1.1](https://bin.disroot.org/?d8e2d4f0300eb5af#9Y1C8CkcH9jAmv1fh4GZs1yYpJmWCG5xG3SvDYdwnJam)

[MIRROR V1.1.2](https://bin.disroot.org/?b1059616f880925f#8ef2oscZXUkPAsJZwGfWvLPQagVAk5GgW4DyssmLvQpG)

[MIRROR V1.1.3](https://bin.disroot.org/?b02658801518aaa7#JE6CsBLWUwAnTdBqeHgeXL7QF5UExgi9rnygcfyMZjCJ)

[MIRROR V1.1.4](https://bin.disroot.org/?d31248fc44c287a0#HQELFWFEMpM9kfTZSGDXTdGFMVKTejox5CajF9Vm4Www)

[MIRROR V1.1.5](https://bin.disroot.org/?284b723ed6aad15f#8VCrrri6yRpdg3uVDSY94wpx7LYkw5uYhm4Vbhka83sM)

[MIRROR V1.1.5.1](https://bin.disroot.org/?26aaef1eff20c271#4GxQQPSDhrszTu1RmERySNVqD2fZW5GZwm3JeL1parpB)

[MIRROR V1.1.6](https://bin.disroot.org/?ae8270578cd9e081#BbcDLU49XqhecvwviHRcdfrZ4vhKdL2AMeKaT5v9oLV1)

[MIRROR V1.1.7](https://bin.disroot.org/?457e4308abe582d8#B9LJG88rmUwrGHHuCof8WpE8CXGmkc2tyrXXicEiJFWk)


---

## Лицензия

MIT

Категории