Как превратить Смарт ТВ в «почти» полноценную рабочую станцию на Linux

от автора

Мотивация и размышления

В течение полугода после покупки я определился с тем, что мне нужно от телевизора. Из-за того, что он используется, как монитор для моего ПК, то никаких смарт-функций мне не нужно. От телевизора требуется отображать картинку достаточно хорошо на мой вкус.

Но! В телевизоре есть железо и оно работает, но зачем и почему — непонятно. Как его превратить в то, что будет работать для меня, но не в виде красивых картинок и видео, которые я могу открыть с ПК.

После многочисленных поисков я не нашёл ничего, кроме подключения миниПК всех размеров и форм-факторов (у меня уже так и есть), смены лаунчера (и это тоже есть) или просто удаления нескольких программ.

Нет, значит сделаем сами

Подготовительный этап

  1. Скачивание программ. Их не так много. Основные программы:

    • FLauncher;

    • Shizuku;

    • Termux;

    • Termux:x11;

    • adb (на ПК. Его не просто скачать, а установить!!!).

Всё скачиваем с официальных источников (чаще Git-платформы)! Если используете форки, клоны или аналоги, то степень риска возрастает.

  1. Оборудование.

    • ПК;

    • телевизор;

    • мышь;

    • клавиатура. Тут я отдельно указал периферию, так как она нужна для телевизора. Оборудование просто должно быть.

Тут первое действие, которое мы делаем. Сбрасываем телевизор до заводских настроек и проверяем, как он выглядит и что на нём есть. Может вам уже и так нравится и дальше не нужно? Если нужно, то получаем то, что больше нам ничего не помешает в виде недостатка памяти, как физической, так и оперативной, багов и лагов из-за программ, и идём дальше

Этап подключения

На этом этапе мы просто первый раз дружим системы между собой и учимся сами, как их друг к другу подключить. Устанавливаем базовые приложения.

Здесь важно понять, как подключиться, что делать и какие этапы. Может потребоваться подключиться к ПК не 1 и не 10 раз по adb и вы должны знать, как это делается.

Нам нужно:

  1. Включить на стороне ТВ отладку по USB.

  2. Подключиться к ТВ по adb.

    • adb connect <IP_АДРЕС_ТВ_ПО_КАБЕЛЮ>:5555

    Тут важно понимать, что ТВ, скорее всего, спросит разрешение. Нужно разрешить и не забыть поставить галку «Всегда разрешать»

  3. Запускаем установку программ с ПК на ТВ.

    • adb install <название_файла.apk>

    Тут ждём заветную строчку Success для каждого файла.

  4. Запустить Shizuku.

    • adb shell /data/app/~~OUkzf_...много символов...-jv/arm/libshizuku.so

    * Эту команду берём из самого Shizuku, который установлен на ТВ. Там есть отдельный пункт для отладки по USB. Тут ждём несколько строчек вывода:

     info: starter begin info: killing old process... info: apk path is /data/app/~~OUkzf_...много символов...-jv/==/base.apk info: starting server... info: shizuku_server pid is 17058 info: shizuku_starter exit with 0 

Этап работы с новой системой

На этом этапе мы делаем все необходимые настройки, чтобы система, которую мы будем использовать, работала стабильно и запускалась сама.

  1. Устанавливаем нужные пакеты в Termux

    • pkg install x11-repo root-repo -y

    • pkg update && pkg upgrade -y

    • pkg termux-x11-nightly openbox micro st fastfetch openssh -y

  2. Тестируем запуск системы, которая у нас получилась

    • termux-x11 :1 &

    • export DISPLAY=:1

    • openbox-session &

    Тут отдельно отмечу, что при вводе 1 и 3 команды я нажимал Ctrl+C, чтоб ввести следующую команду. Есть предупреждения, но я на них не обращаю внимание.

  3. Открываем Termux:x11 и видим чёрный экран. Если нажимаем на правую кнопку мыши, то видим контекстное меню. Это лаунчер Openbox.

  4. После того как получили «рабочий стол», можно немного настроить. Идём обратно в Termux.

    • mkdir -p ~/.config/openbox

    • cp /data/data/com.termux/files/usr/etc/xdg/openbox/* ~/.config/openbox/

    • micro ~/.config/openbox/menu.xml

    Тут перед нами конфиг, в который мы добавляем вот это:

    <item label="Terminal">  <action name="Execute">    <command>st</command>  </action></item>

    Сохраняем через Ctrl+S и выходим — Ctrl+Q

    • openbox --reconfigure

  5. Запустим ssh-службу для доступа к машине извне (при следующей перезагрузке ТВ или отключении от сети).

    • micro ~/.config/openbox/autostart

    Начало не трогаем, а в самый конец на новой строке пишем sshd &

    Сохраняем через Ctrl+S и выходим — Ctrl+Q

    Далее задаём пароль. Любой. Важно! При вводе пароля вы не видите символов

    • passwd

    После задания пароля запускаем сервис здесь и сейчас без ожидания выключения

    • sshd

  6. Настроим автозапуск нашей системы при включении ТВ с нуля (когда от сети отключаете, а не с пульта выключаете)

    • mkdir -p ~/.termux/boot

    • micro ~/.termux/boot/start-x11.sh

    Это пока пустой файл, в который вы вставляете следующее:

    #!/data/data/com.termux/files/usr/bin/sh#Разрешаем просыпаться и чистим старые сессии, если они есть, а потом запускаем новую.termux-wake-lockrm -f /tmp/.X11-unix/X1pkill -f termux.x11termux-x11 :1 &sleep 3#Запускаем графикуexport DISPLAY=:1openbox-session &sleep 2#Делаем вывод автоматически на передний план, чтобы сразу пользоваться.am start -n com.termux.x11/com.termux.x11.MainActivity

    Сохраняем через Ctrl+S и выходим — Ctrl+Q

    • chmod +x ~/.termux/boot/start-x11.sh

  7. Теперь добавляем чуть-чуть магии в работу всей системы автоматическим запуском того, что запускаться автоматически не должно.

    • pkg install android-tools -y

    • micro ~/.config/openbox/autostart

    Спускаемся на 2 строки ниже последней нашей записи и пишем следующее

    adb connect 127.0.0.1:5555adb -s 127.0.0.1:5555 shell /data/app/~~OUkzf_...много символов...-jv/arm/libshizuku.so

    * Эту команду берём из самого Shizuku, который установлен на ТВ. Там есть отдельный пункт для отладки по USB.

Теперь у нас есть рабочая система, которая автоматически запускается, поднимает отладку и даёт нам возможность спокойно работать с Android без боязни его уничтожить. И мы не боимся, что пропадёт что-то важное из программ, так как все важные программы мы помним (4 штуки из первого раздела).

Тут стоит отдельно остановиться и отметить, что на данный момент все изменения, которые мы сделали, легко обратимы. Это была самая простая часть.

Перед уходом в следующую часть выключаем телевизор из розетки на 5-10 секунд. Потом включаем и ждём. Примерно через минуту перед вами должен быть чёрный экран с курсором. Нажимаете на правую кнопку мыши и появляется контекстное меню. Нажимаете на ST и открывается окно терминала.

Если что-то работает не так. Возвращаемся к первому пункту всей статьи и проверяем.

Отправляем старую систему отдыхать.

Теперь нам нужно определиться, что лишнее в нашем телевизоре, а что должно остаться. Эти программы удаляемые, но мы их ни в коем случае не удаляем:

  • FLauncher

  • Shizuku

  • Termux

  • Termux:x11

Самый простой способ для начала пройтись в разделе «Настройки» → «Приложения»:

  1. Выбрать конкретные приложения

  2. Открыть информацию нажатием

  3. Нажать на «Disable» или «Отключить» (если есть)

  4. А после этого «очистить данные»

  5. Ниже отключить уведомления

Важно! Идём с начала списка по 4-5 приложений после которых выключаем телевизор, обязательно отключаем от розетки на 5-10 секунд и включаем заново.

Есть небольшой риск не включиться или получить полный сброс.

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

И тут нам нужно приложение Canta.

  1. Открываем приложение.

  2. Справа вверху есть символ воронки → нажимаем.

  3. Снимаем галку, которая стоит на системных.

  4. Теперь идём по списку сверху вниз и выбираем то, что не нужно или отключено.

  • Отключено: просто отмечаем и нажимаем на пункт → читаем, что отключили. Больше оптимизация всегда хорошо. Если отключили что-то важное, то запоминаем название и тут же идём включать в настройки.

  • Не нужно: сначала читаем, думаем нужно ли оно нам. Если точно нет, то читаем, думаем ещё раз и потом отмечаем.

  1. После выбора нужных приложений нажимаем на корзину справа снизу.

Важно! Идём с начала списка по 2-3 приложения, после которых выключаем телевизор, обязательно отключаем от розетки на 5-10 секунд и включаем заново.

Есть большой риск не включиться.

Обратите внимание на одну важную деталь: При удалении приложений вы будете выключать телевизор из розетки для проверки целостности системы. Смотрите за запуском графики Termux. Он должен запускаться автоматически без вашей помощи.

Ещё важное уточнение: Когда отключите графику (лаунчер) телевизора, он может ненадолго отключиться и потом включиться. Это нормально. В этом случае вместо стандартного лаунчера вы увидите FLauncher.

Наслаждаемся рабочим Linux и далее всё настраиваем в Openbox по стандартным мануалам из интернета.

Суровая реальность или как это прошло у меня

Если с установкой программ никаких проблем нет, так как это просто этап ввода команд, то вот с Shizuku возникли проблемы, так как я не совсем понимал, как это работает. Я пытался найти пути, где он установлен. Это заняло немало времени и абсолютно ни к чему не привело. После использования команды из самого приложения всё сразу же завелось и больше я проблем не испытывал.

В самом приложении рекомендуется способ с самого устройства по беспроводной отладке, но проблема с ним в том, что, например, на моём телевизоре такого пункта вообще нет и он не появляется даже при подключении к Wi-Fi. И ещё особенность телевизора в том, что он видит сигнал Wi-Fi и даже показывает, что идёт процесс подключения, но больше ничего. В конце он просто вам выдаст ошибку, что не может найти сеть. Как только вы отключите проводной интернет от ТВ, он сразу же подключится к Wi-Fi, если вы ранее пароль задали. Такая странная техника.

Из систем сначала я пытался установить Nix-On-Droid, что вроде бы логично в моём случае, ведь я использую NixOS на основном ПК. И тут оказалось, что на мой ТВ он не встаёт, так как не совместим.

Потом я попробовал proot-distro с Alpine, но он меня обрадовал ошибкой «terminated with signal 11». Я не стал разбираться, так как списков дистрибутивов я не нашёл, да и немного дистрибутивов легковестных для моего случая.

Поэтому я ушёл в сторону использования Termux, как системы.

С самой системой проблем не возникло, так как это «стандартная» Linux-система.

Но проблемы возникла на этапе выбора программ… Сначала я выбрал Alacritty, как эмулятор терминала, но при его запуске в системе быстро заканчивалась память и забито было всё, в том числе и своп. И он часто просто не стартовал. Поэтому был выбран st в стандартном виде. Чем меньше потребление, тем лучше.

Кто-то может возразить, что я не выбрал в качестве оконного менеджера, например, i3, ведь он удобнее для клавиатуры и легче. Тут я спорить не стану и лишь предложу пройти моим путём с заменой openbox.

После того, как система благополучно стабилизировалась, насколько это можно назвать стабильным поведением, началась борьба за память, за любую память. Чем меньше её у ТВ, тем больше она нужна нам.

Для решения вопроса нужно чистить Android, в котором и стоит Termux. И тут самый интересный момент. Не зря я в инструкции указываю на этом моменте сноски, что это делать небезопасно. Это работает как 2 зависимых друг от друга параметра: безопасность действий, количество отключенных/удалённых программ. Чем больше приложений вы уже удалили, тем более небезопасным становится дальнейше удаление. А показателем успеха считается точка, когда вы оставляете только то, что вам действительно нужно.

Мне не нужно было ничего. Я хотел сократить сторону Android максимально, но с возможностью базовых функций устройства, как телевизора. И несмотря на начало статьи, надо признать, что кроме просто включения, мне важно, чтобы я мог, например, переключаться между входами HDMI. И неудача пришла в первые 10 минут, когда я понял, что вижу интерфейс Android и всё работает, но при нажатии на пульте на кнопку «Вход» ничего не происходит, а при открытии настройки через интерфейс телевизора и выборе любого входа пишет «Не удалось открыть источник». И при этом самого Android в списке источников нет. Это нормальное поведение при действиях почти вслепую. А действовал я так, потому что в Canta есть описания многих компонентов Android, которые встречаются в смартфонах, но компоненты ТВ практически не описаны, по крайней мере, у меня система собрана из большинства неизвестных компонентов. А далее было 4 часа плотных раздумий, как выйти из интерфейса Android, т.к. выше в инструкции я описываю, как подготовиться к такому «сюрпризу» с отладкой самого себя через localhost, но у меня не было статьи и не было такого трюка. Трюк появился именно из-за этого.

После того как я нашёл способ вернуть всё обратно, я выяснил, что одна специфичная программа содержит в себе всю логику железа, при очень безобидном названии «LiveTV». Смотря изначально на неё, у меня была только одна мысль, как её удалить и зачем мне в Android TV эта программа, если сам ТВ имеет в базовой функциональности тюнер, антенну и т. д. Эти грабли я успешно использовал по назначению — я на них попрыгал.

После небольшого отката и чистки очевидных приложений, пришло время тяжёлого выбора. Из-за алфавитного порядка выбор сразу встретил меня сверху. Нужно чистить Google сервисы, в том числе и Android TV. И вот тут сильно помогает, что я заранее подумал о его замене и выбрал Flauncher. Меньше него для ТВ я найти не смог, скорее даже минималистичнее. Тут важным моментом было максимальное отсутствие каких-либо настроек, кастомизаций. Мне нужен был только вариант запуска приложения, если я когда-нибудь открою лаунчер. Почему тут это важно, ведь кажется, что мы просто меняем одно на другое? Да, фактически мы меняем, но практически я бы сказал, что просто ставим заглушку в виде Flauncher, чтобы система не сошла с ума и не стала перезагружаться бесконечно (bootloop), так как не видит лаунчер. И тут я бы предложил сразу поставить его, как дефолт, но я этого делать не стал в инструкции, так как для меня это был сильный сигнал того, что мы перешли линию, где всё очень опасно. С этим чувством опасности я дошёл до конца списка и в Canta нашёл 58 отключенных/удалённых компонентов.

Немного цифр и статистики

  1. Доступно всего ОЗУ 1.75ГиБ: До чистки свободно 200 МиБ, после чистки 900 МиБ.

  2. Доступно всего Своп 500МиБ: До чистки свободно 0, После чистки 500МиБ (Да, доступен полностью).

  3. В моей системе «установлено» на момент стабилизации 209 пакетов.

  4. Время исследования и планирования: ~6 месяцев.

  5. Время активных действий: 18 часов с перерывами.

Вывод

Мне было интересно посмотреть на работу с ОС с другой стороны, когда ты не боишься, что что-то сломается. Интересно посмотреть в действии на инструменты, которые ты редко встречал в статьях или на форумах, но никогда это не использовал. Есть ли какой-то в этом смысл? Для меня только развлечение. Я даже не знаю, для чего теперь эту систему использовать. Она просто есть. Я сделал её, потому что могу, а не потому что надо.

Блок вопросов сообществу

  1. Для чего можно использовать эту систему?

  2. Какие ещё инструменты существуют для подобных действий?

  3. Что бы вы заменили в моём списке программ и на что?

ссылка на оригинал статьи https://habr.com/ru/articles/1052166/