ТВ-набор для Станции 1¶
Станция 1 выводит экран Алисы по HDMI. Рецепт ставит рядом ТВ-лаунчер, YouTube-клиент и VPN-клиент, а управляет ими веб-пульт в браузере телефона: Bluetooth-пульты к Станции 1 не подключаются.
Проверено на: Яндекс Станция 1 (tulip), прошивка 2.369.5.46, root, SSH (Dropbear) и Entware от AliceBridge, телевизор 1080p по HDMI. Версии приложений: Couchy Launcher 1.0.6, SmartTube 32.68, v2rayNG 1.9.45. На других моделях не проверялось.
Не проверялось: работа VPN, воспроизведение YouTube через VPN, режим «Couchy при загрузке» после перезагрузки (настройка сохраняется, но сценарий загрузки не прогонялся).
Веб-пульт работает без пароля
lighttpd слушает порт 8080 на всех интерфейсах, а CGI /cgi-bin/k работает
с правами root: любой в вашей сети может запускать приложения, вводить текст и
перезагружать колонку — пароля нет. Держите колонку только в доверенной сети и не
пробрасывайте порт 8080 наружу. То же касается SSH на порту 2222 (см.
шаг 2).
Что ставится¶
| Компонент | Откуда | Зачем |
|---|---|---|
| Веб-пульт | contrib/station1-tv/ |
кнопки, запуск приложений, настройки; http://<STATION_IP>:8080 |
| Couchy Launcher | conreo/couchy-launcher | ТВ-лаунчер под управление с пульта, без сервисов Google |
| SmartTube | yuliskov/SmartTube | YouTube для ТВ, без сервисов Google |
| v2rayNG 1.9.45 | 2dust/v2rayNG | VPN (VLESS, VMess, Trojan, Shadowsocks) |
| lighttpd | Entware | отдаёт страницу пульта и выполняет CGI |
Официальные YouTube и лаунчер Android TV требуют сервисов Google и Android TV — на Станции 1
их нет (Android 6.0.1, API 23). Happ и Incy не ставятся: им нужен Android 7.0+
(minSdkVersion 24, ошибка INSTALL_FAILED_OLDER_SDK). У v2rayNG 1.9.45 minSdkVersion 21.
Установка¶
Нужно заранее: root, SSH и Entware через AliceBridge, клон репозитория, Windows с OpenSSH.
-
Из клона репозитория запустите установщик:
Пароль root спросят дважды. С SSH-ключом —
-Key <путь к ключу>. Если на компьютере включён VPN и колонка без него недоступна —-BindAddress <IP компьютера в локальной сети>. -
Скрипт скачивает APK с GitHub-релизов (Couchy и SmartTube — последние, v2rayNG — 1.9.45), одним архивом отправляет их на колонку вместе с файлами пульта и запускает
install-on-speaker.sh. В конце он печатает адрес пульта. -
Откройте в браузере телефона адрес пульта (порт 8080):
Повторный запуск безопасен: приложения обновляются поверх (pm install -r), их данные
остаются.
Пульт¶
- крестовина и OK, «Назад», Play/Pause, меню, громкость;
- запуск приложений: «Алиса», «Лаунчер» (Couchy), «YouTube» (SmartTube), «VPN» (v2rayNG);
- ввод текста для поиска — только латиница (
input text); - нажатие обрабатывается примерно за 1,2 с, при удержании стрелки повторяются раз в 0,9 с.
В разделе «Настройки»:
- VPN (v2rayNG) — поле для ключа (vless, vmess, trojan, Shadowsocks) или ссылки подписки (по протоколу HTTPS): ссылка уходит в v2rayNG, набирать её стрелками не нужно;
- Лаунчер при загрузке — Алиса или Couchy (хранится в
/data/dropbear/tv.conf); - Выгрузить лаунчер Яндекса —
am force-stop ru.yandex.quasar.app; - Перезагрузить колонку.
Без лаунчера Яндекса Алиса перестаёт отвечать голосом
Служба Алисы работает внутри ru.yandex.quasar.app. Это касается и режима
«Couchy при загрузке», и кнопки выгрузки. Чтобы вернуть голос, выберите «Алиса» и
перезагрузите колонку.
VPN и YouTube¶
Если DNS роутера или провайдера не отдаёт адрес youtube.com, SmartTube показывает
Unable to resolve host "www.youtube.com". Тогда:
- Пульт → «Настройки» → «VPN (v2rayNG)» → вставить ключ или ссылку подписки → «Добавить».
- На телевизоре v2rayNG пишет, удался ли импорт.
- Выберите сервер, нажмите ▶ внизу справа и подтвердите запрос Android на VPN кнопкой OK.
Откат¶
sed -i '/remote.sh/d' /data/dropbear/start.sh
rm -rf /opt/share/remote /data/dropbear/remote.sh /data/dropbear/tv.conf /opt/etc/lighttpd/remote.conf
pm uninstall com.conreo.couchytv; pm uninstall org.smarttube.stable; pm uninstall com.v2ray.ang
/opt/bin/opkg remove lighttpd-mod-cgi lighttpd
reboot
Как это работает¶
lighttpd(Entware) слушает порт 8080;/cgi-bin/k— скрипт наsh, который вызываетinput keyeventиam start. Пульт запускается из/data/dropbear/start.shскриптомremote.sh; он же приBOOT_LAUNCHER=couchyждётsys.boot_completed, открывает Couchy и выгружает лаунчер Яндекса.opkgна Станции 1 качает черезwget, аwgetиз busybox не резолвит DNS (на Android нет/etc/resolv.conf). Установщик кладёт/opt/bin/wget— обёртку над/bin/curlс сертификатами/system/vendor/quasar/ca-certificates.crt.- v2rayNG 1.9.45 декодирует параметр
urlвv2rayng://install-config?url=…дважды (getQueryParameterиURLDecoder). Поэтому CGI кодирует ссылку второй раз (%→%25), иначе портятся%2Fи+и импорт падает с ошибкойimport subscription failed.
Что не работает¶
- Утилита monkey (
monkey --port). Быстрееinput keyevent(~150 мс против ~1,2 с), но, пока она запущена, процесс Алисыmaind --platformdперезапускается каждые 30–80 секунд (видно в/data/quasar/launcher2.log). Вдобавокmonkeyпадает при повторном подключении клиента (MonkeySourceNetworkViews.setup). - Bluetooth-пульты и телефон как Bluetooth-клавиатура. В стеке Bluetooth Станции 1 нет
профиля HID: при подключении в logcat появляется сообщение
L2CAP - rcvd conn req for unknown PSM: 17. Доступны только A2DP Sink, AVRCP и GATT. - Couchy как лаунчер по умолчанию. После установки второго лаунчера кнопка «Домой»
показывает выбор
Select a Home app. Рецепт лаунчер по умолчанию не меняет: Couchy открывается поверх лаунчера Яндекса.