
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-api | CLI-мост к микрофону и медиаплееру Android |
ffmpeg | Преобразует записи Android в формате M4A в необработанный PCM для кодирования Opus |
Быстрый старт```
- Run: bash terminalphone.sh
- Install deps: Select option 7
- Start Tor: Select option 8 (wait for 100% bootstrap)
- Set shared secret: Select option 4 (both parties must use the same secret)
- 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--3 | 20--40 КБ | Надёжно на большинстве соединений |
| 3--5 | 40--80 КБ | Хорошо на стабильных цепях, возможны задержки на мобильных данных |
| 5--10 | 80--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