Уже говорил как-то, что в свое время перешел с Windows на FreeBSD в том числе из-за того, что FreeBSD работала быстрее на том же железе, и не требовалось плясок с бубнами, потому что в общем-то всё что нужно — настраивалось от и до.
Потом Linux — потому что лучше поддержка железа, ну и, в общем, никакого желания возвращаться на Windows уже не возникало.
Но время идёт, и вот последние версии Ubuntu до боли напоминают Windows своей неспешностью и сложнопредсказуемостью. А тут еще желание сделать удобный для работы десктоп из TV-бокса…
В принципе, нашлась уже готовая Armbian-сборка под мой TV-бокс, с уже настроенным десктопом XFCE — но несмотря на то, что XFCE считается «легковесной» — она оказалась недостаточно легковесная, не настолько насколько мне бы хотелось.
Заметно подтормаживали окошки, всё в целом как-то не так…
А ведь несмотря на свою «маленьковость» — компьютер-то должен быть неплохим: 4Гб RAM, 4 ядра по 1.5ГГц, когда-то подобные были вообще за пределами доступности, и ведь тогда «всё работало», и работало быстро, на гораздо более медленном железе.
Что же не так, неужели ARM в принципе тормозные процессоры?
В общем, решил собрать «десктоп» с нуля. Ну, почти.
(всё дальше — за исключением сугубо «железячной» части вполне применимо для любых компьютеров и ноутбуков)
Требования простые:
— большой экран
— минимум занимаемого места
— беспроводное примерно всё, кроме сети
— многооконная среда
— эмулятор терминала (shell, vim, MidnightCommander)
— немного графики (Gimp)
— ардуино-софт
— Офис
— печать на принтер
— браузер
— софт для рисования печатных плат (Fritzing)
— видеоплеер, музыка, наушники — вот это всё
Буду сразу говорить про итоговые варианты — потому что промежуточные не подходили по разным причинам и были отбракованы.
Аппаратная часть:
За основу взят TV-бокс Z8, на базе процесора H618. Для сравнения — аналогичная процедура делалась на других устройства, на H616 и rk3528: забегая вперед, наилучшие результаты по графике показал именно H618, чуть хуже H616, а вот rk3528 отрисовывал графику хуже всего. Это при том, что с точки зрения «машинки для расчётов» именно rk3528 работает быстрее всех. То есть, он хорош для сервера, но не для десктопа.
Экран — 22″ телевизор с разрешением экрана 1920х1080. Почему именно телевизор — потому что он умеет воспроизводить звук по HDMI. За последние годы сильно отвык от того, что пиксели можно увидеть глазом, и как только раньше работали за такими мониторами?
Проблему места на столе удалось решить с помощью поворотного кронштейна для монитора — из тех, что крепятся на край стола, и позволяют крутить экран как угодно, при этом сам стол свободен, на нём ничего не громоздится.
Надо же, раньше такого не было.
Беспроводная полноразмерная клавиатура с тачпадом легко убирается в сторону, не загораживая пространство.
На удивление, батареек хватает надолго.
USB-порт на боксе заработал только один — можно было конечно поковыряться в DTB и попробовать включить второй — но было лень, оказалось проще взять плоский USB-хаб, и прилепить его, и «системный блок», к самому монитору.
Получился аккуратный «моноблок».
Встроенного WiFi и Bluetooth в этой модели нет, но сейчас есть масса разнообразных USB-донглов, которые легко решают эту проблему.
Система:
За основу взята сборка Armbian-unofficial_24.5.0-trunk_Transpeed-8k618-t_bookworm_edge_6.7.12.img.xz. По умолчанию сразу после установки она занимает всего около 2Гб места (как корректно назвать то, что не RAM, не ROM, но и не диск?).
Строка ввода логина-пароля, текстовый режим, хорошо для сервера, но мне нужен десктоп для работы за ним. При этом задача в том, чтобы максимально избегать любых «десктопных сред», прежде всего из-за интегрированности: когда работа одной программы зависит от работы другой, и замена одной из них может приводить к сложнопредсказуемым последствиям.
Ну и конечно по причине того, что современные DE тащат за собой кучу разнообразного хлама, из которого нужны бывают одна-две программы. А место на «диске» emmc — не резиновое.
Однако, отказ от «единой интегрированной системы» может приводить к интересным глюкам, поэтому сразу отключаем всё лишнее. Например, пришлось полностью отключить systemd.
В Debian это делается примерно так: Очищаем кеш пакетов:
apt clean
Скачиваем нужные для перевода системы в SystemV mode
apt —download-only install sysvinit-core isc-dhcp-client
Переходим в single-user mode:
systemctl rescue
Устанавливаем скачанное:
apt install /var/cache/apt/archives/*.deb
И перезагружаемся. В результате получаем старый добрый SystemV режим с runlevels, и скриптами запуска-останова сервисов.
Почему старый добрый?
Дело в том, что запуск разных демонов и скриптов становится более предсказуемым и прозрачным: есть определенный список скриптов, которые запускаются в определенной последовательности — причем именно вы определяете, что и когда запускать, или не запускать, и находятся они в одном месте — /etc/init.d, откуда уже идут симлинки для запуска-останова для различных runlevels: /etc/rcX.d
То, чего там нет — не будет запускаться, а если не запустилось то, что там есть — всегда можно посмотреть почему.
Заодно и логи нормальные, вместо единой логопомойки с фильтрами — всё по своим местам.
(хотя есть любители и обратного…)
Однако теперь, например, для запуска работы сети нужно чуть-чуть приложить руки и написать
/etc/network/interfaces:
... auto end0 iface end0 inet dhcp ...
или добавить в /etc/rc.local команду типа
dhclient end0
В общем, самому принять какое-то решение и указать компьютеру, что именно он должен сделать.
Это может показаться более сложным — но зато он не будет заниматься самодеятельностью когда не надо.
Установка Иксов (X-window)
От графической системы мне требуется только показывать окошки и запускать программы, поэтому достаточно будет простейшего оконного менеджера. Если на пальцах: X-сервер рисует что-то на экране, программы рисуют в своих окошках, а окнами управляет оконный менеджер: создает, двигает и закрывает. Больше ничего особенного он не делает, а потому и практически не тормозит.
В качестве такого оконного менеджера неплохо себя показал WindowMaker — минималистичный оконный менеджер, с встроенным меню, настраиваемыми хоткеями и возможностью запуска любой программы по имени.
Разумеется, есть и еще более минималистичные, вообще в этом плане у Иксов очень неплохое поле для экспериментов.
Но для нормальной работы нужен еще эмулятор терминала:
фактически стандарт — xterm, но забегая вперед — лучшим оказался терминал sakura, который его прекрасно замещает.
По умолчанию ни того, ни другого нет, поэтому устанавливаю sakura.
Для запуска Иксов из командной строки нужен пакет xinit, включающий в себя скрипты запуска.
И конечно, нужен сам X-сервер со всеми своими стандартными модулями. Поэтому устанавливается это всё вместе так:
apt install xserver-xorg xinit wmaker sakura
Проверяем работу X-сервера, запуская из-под рута:
X :0
должен показать черный экран, это значит всё успешно заработало. Заходим в другую консоль (Ctrl-Alt-Fx или по ssh) и прибиваем процесс Xorg.
Либо не заработает, и напишет, что ошибки можно посмотреть в логе типа /tmp/.X0/log — тогда надо смотреть что ему не понравилось…
Теперь заходим обычным юзером, создаем в своем каталоге файл .xinitrc с единственной строкой:
wmaker
И пробуем запустить:
startx
Должен запуститься WindowMaker.
Вызов меню — F12, в меню есть пункт Run — нажимаем, пишем sakura, и открывается терминал.
В меню «по умолчанию» скорее всего терминалом будет указан xterm, но мы его не ставили, поэтому пока вот так, теперь надо всё настраивать.

Вид «по умолчанию», конечно, так себе — но это настраивается, чуть позже.
В левом верхнем (обычно) углу экрана — иконка программы настройки. Программа реально древняя, поэтому к интерфейсу есть много вопросов — но пользоваться им придется примерно один раз. Несмотря на древность — всё работает. По сути нужно только меню для запуска основных программ и настройки хоткеев.
Поддерживается много «экранов», подобие тайлинга (размещение двух окон рядом вертикально или горизонтально), максимизация-минимизация и так далее.
Остается настроить фон, цвет и вид меню, шрифты поприятнее — и в общем-то всё. Свои задачи управления окнами он выполняет, и выполняет хорошо, а большего от него и не требуется. Всё нужное — настраивается отдельно.
Настройки WindowMaker — в каталоге ~/GNUstep/Defaults, файл WindowMaker и WMRootMenu.
Простые текстовые файлы, которые можно править вручную, например для массовой замены шрифтов или корректировки списка программ.
Некоторые вещи так делать просто проще, чем тыкать в иконки «программы настройки».
Пример конфига WindowMaker
{ FTitleColor = "#ffffff"; FrameBorderColor = "#b6b6b3"; LTCMaximizeKey = None; CycleIgnoreMinimized = NO; MenuDisabledColor = gray60; LastWorkspaceKey = None; MoveToWorkspace9Key = None; IconTitleBack = "#4c6b88"; FTitleBack = (hgradient, "rgb:79/a2/cf", "rgb:20/34/41"); MoveToPrevWorkspaceLayerKey = None; ClipTitleFont = "LXGW WenKai TC Light:slant=0:weight=50:width=100:pixelsize=12"; MiniwindowPreviewBalloons = YES; MaximizeKey = F11; HideKey = "Mod4+H"; MouseForwardButtonAction = None; MoveToWorkspace7Key = None; IconTitleFont = "LXGW WenKai TC Light:slant=0:weight=50:width=100:pixelsize=11"; LargeDisplayFont = "LXGW WenKai TC Light,serif:pixelsize=20"; RBCMaximizeKey = None; IconificationStyle = none; WindowShortcut10Key = None; MoveToWorkspace2Key = None; MouseWheelTiltAction = None; MenuTitleColor = "#ffffff"; WindowShortcut3Key = None; ClipAutolowerDelay = ""; MenuTitleFont = "LXGW WenKai TC Light:slant=0:weight=50:width=100:pixelsize=18"; EnableWorkspacePager = YES; SmoothWorkspaceBack = YES; WindowRelaunchKey = None; MoveTo6to12Head = None; WindowShortcut4Key = None; NoWindowOverDock = YES; OmnipresentKey = None; WorkspaceBack = (tpixmap, ".local/share/pictures/BlueImage.jpeg", black); SnapEdgeDetect = 1; LBCMaximizeKey = None; HighlightTextColor = "#000000"; ClipAutoexpandDelay = ""; WindowShortcut9Key = None; EnforceIconMargin = NO; HelpBalloons = NO; WindowSnapping = NO; KeepAtBottomKey = None; MoveResizeKey = None; KeepOnTopKey = None; ClipTitleColor = "rgb:79/96/cf"; AppIconBalloons = NO; MoveHalfMaximizedWindowsBetweenScreens = NO; MoveTo12to6Head = None; WorkspaceBorder = None; FrameFocusedBorderColor = "#b6b6b3"; WindowTitleFont = "LXGW WenKai TC Light:slant=0:weight=80:width=100:pixelsize=18"; MoveToWorkspace8Key = None; WrapAppiconsInDock = YES; RunKey = "Mod4+F2"; LHMaximizeKey = "Mod4+Left"; MoveToPrevWorkspaceKey = "Control+Shift+Mod1+Left"; MoveToWorkspace6Key = None; ResizebarBack = (hgradient, "rgb:49/5d/7e", "rgb:10/20/20"); MiniPreviewSize = 56; MoveToWorkspace10Key = None; DisplayFont = "LXGW WenKai TC Light:slant=0:weight=80:width=100:pixelsize=18"; KbdModeLock = YES; MouseBackwardButtonAction = None; BHMaximizeKey = "Mod4+Down"; WorkspaceBorderSize = 0; OpenTransientOnOwnerWorkspace = YES; CycleActiveHeadOnly = NO; MenuTitleExtendSpace = 0; MoveToWorkspace1Key = None; DockRaiseLowerKey = None; IgnoreGtkHints = NO; ShowClipTitle = YES; WindowShortcut1Key = None; RHMaximizeKey = "Mod4+Right"; FrameSelectedBorderColor = "#ffffff"; ClipAutocollapseDelay = ""; THMaximizeKey = "Mod4+Up"; AlternativeHalfMaximized = NO; MiniaturizeKey = "Mod4+M"; WindowShortcut2Key = None; MoveToNextWorkspaceLayerKey = None; WorkspaceMapKey = "Control+Mod1+Up"; ToggleKbdModeKey = None; DragMaximizedWindow = Move; DoNotMakeAppIconsBounce = NO; MiniwindowTitleBalloons = NO; MaximusKey = "Mod1+F11"; WindowShortcut7Key = None; OpaqueResize = NO; MenuTextBack = (hgradient, "rgb:49/5d/7e", "rgb:10/20/20"); RaiseAppIconsWhenBouncing = NO; ResizeIncrement = 0; DisableAnimations = YES; WindowShortcut8Key = None; OpaqueMoveResizeKeyboard = NO; MoveToLastWorkspaceKey = None; GroupNextKey = None; Attraction = NO; SingleClickLaunch = NO; MenuTextColor = white; IconBack = (mdgradient, "rgb:28/44/54", "rgb:38/55/79", "rgb:10/20/20"); AntialiasedText = YES; DisableBlinking = NO; MoveToWorkspace5Key = None; WindowTitleExtendSpace = 0; NormalCursor = (builtin, left_ptr); WorkspaceNameDisplayPosition = center; WindowListKey = "Mod4+F12"; MenuTextFont = "LXGW WenKai TC Light:slant=0:weight=50:width=100:pixelsize=18"; ScreenSwitchKey = None; MenuTitleBack = (hgradient, "rgb:79/a2/cf", "rgb:20/34/41"); DisableMiniwindows = YES; SnapCornerDetect = 10; MoveToNextWorkspaceKey = "Control+Shift+Mod1+Right"; HMaximizeKey = None; SnapToTopMaximizesFullscreen = NO; HighlightColor = "#ffe0ac"; GroupPrevKey = None; PointerWithHalfMaxWindows = NO; MinimizeAllKey = None; MoveToWorkspace3Key = None; DisableDrawers = NO; CClipTitleColor = "rgb:61/61/61"; WindowShortcut5Key = None; HideOthersKey = None; ClipAutoraiseDelay = ""; PTitleBack = (hgradient, "rgb:70/82/af", "rgb:10/20/20"); MenuTextExtendSpace = 0; WindowShortcut6Key = None; SaveSessionOnExit = YES; BounceAppIconsWhenUrgent = NO; ViKeyMenus = NO; UTitleColor = gray; UTitleBack = (hgradient, "rgb:49/5d/7e", "rgb:10/20/20"); HighlightActiveApp = YES; CirculateRaise = YES; PTitleColor = "#ffffff"; MoveToWorkspace4Key = None; RTCMaximizeKey = None; }
Конечно писать это с нуля глупо, но вот если надо подправить только шрифты или цвета — то почему бы и не поправить в тексте?
Заливку фонов можно задавать сплошным цветом, двух- и трех-точечными градиентами, сами цвета — как конструкцией «rgb:70/82/af» так и «#7082af»
Модификаторы кнопок: Control, Shift, Mod1 (Alt), Mod4 (Win, Super).

Шрифты
Иксы поддерживают шрифты ttf. Достаточно скачать их, например, с Google Fonts, и распаковать в каталог .local/share/fonts, затем обновить кеш:
fc-cache -r
Посмотреть список имеющегося:
fc-list
Есть еще настройки сглаживания — по умолчанию сейчас сглаживание включено, но если нет — можно включить вручную:
Создать файл .config/fontconfig/fonts.conf:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="antialias" mode="assign"> <bool>true</bool> </edit> <edit name="hinting" mode="assign"> <bool>true</bool> </edit> <edit name="hintstyle" mode="assign"> <const>hintslight</const> </edit> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> <edit name="autohint" mode="assign"> <bool>false</bool> </edit> <edit name="lcdfilter" mode="assign"> <const>lcddefault</const> </edit> <edit name="dpi" mode="assign"> <double>96</double> </edit> </match> </fontconfig>
В нем включаем в явном виде антиалиасинг, отключаем автохинтинг (он может работать плохо на некоторых шрифтах), и включаем хинтинг для тех шрифтов которые это умеют.
Параметр DPI тут влияет на расчет размеров отрисовки шрифта, соотношение между «пунктами» и «пикселями» (и размеры элементов интерфейса в некоторых программах).
В настройках одних программ размер указывается просто цифрой, скажем «16» — это в пунктах, а в других — в пикселях, «16px»
Раскладка клавиатуры
Клавиатура настраивается стандартно, через Xkb. В стартовом скрипте .xinitrc перед запуском wmaker установить раскладки:
setxkbmap -layout us,ru -option grp:caps_toggle,grp_led:caps
Это даёт переключение раскладки клавишей CapsLock, с отображением состояния лампочкой caps
При этом стандартное поведение CapsLock (прописные-строчные) — через Shift-CapsLock.
Возможны и другие кобинации, типа ctrl_alt_toggle, ctrl_shift_toggle и т.д., кто как привык.
Звук
Некоторые приложения умеют работать напрямую через ALSA, для них не требуется ничего особенного.
Проверка:
aplay /usr/share/sounds/alsa/Front_Center.wav
Если звука нет — стоит проверить права:
ls -l /dev/snd
drwxr-xr-x 2 root root 60 Mar 10 21:04 by-path
crw-rw—- 1 root audio 116, 4 Mar 10 21:04 controlC0
crw-rw—- 1 root audio 116, 3 Mar 10 21:04 pcmC0D0c
crw-rw—- 1 root audio 116, 2 Mar 10 21:04 pcmC0D0p
crw-rw—- 1 root audio 116, 1 Mar 10 21:04 seq
crw-rw—- 1 root audio 116, 33 Mar 10 21:04 timer
То есть пользователь должен быть в группе audio.
Его можно туда добавить разными способами, но можно и напрямую — просто вписать в /etc/group
audio:x:??:username
После перелогина права применятся. Проверка — команда id, в groups должна быть группа audio
Для некоторых приложений, например браузеров, нужен pulseaudio. Установка:
apt install pulseaudio pavucontrol
В .xinitrс внести изменения:
... pulseaudio --start wmaker pulseaudio --kill ...
Заходим в графику startx, запускаем терминал, проверяем:
paplay /usr/share/sounds/alsa/Front_Center.wav
Можно еще отключить гашение экрана, если оно не нужно. В тот же самый .xinitrc перед запуском wmaker добавить:
xset s off -dpms
В общем, можно сказать что первоначальная настройка завершена, остается установить программы и настроить меню. Но уже видно, что всё работает достаточно быстро.
Несколько утилит: — блокировка экрана — xsecurelock — скриншоты — maim — часы — wmclock — забавный индикатор загрузки процессора — wmfire
Wayland
Иксы хороши тем что работают практически на любом железе. Но сейчас в моде Wayland — что ж, он тоже здесь работает.
Если не вдаваться в подробности — тут логика такая: используется «композитор», совмещающий функции «графического сервера» и «оконного менеджера», поэтому задача сводится к запуску этого самого «композитора».
В отичии от Иксов — тут вариантов не так много: образцово-показательный Weston, тайловый Sway, Compiz-подобный Wayfire, однозадачный Kiosk и всё те же монстры Gnome/KDE.
Вроде есть что-то еще — но там всё экспериментально-самосборное.
Для поддержки чисто X-приложений — нужен еще Xwayland, которые работает внутри Wayland-композитора.
Монстров мы избегаем, тайловые менеджеры — на любителей, у Weston был какой-то глюк с x-приложениями — так что ставим Wayfire.
По факту, если кто помнит Compiz — вот почти то же самое, только быстрее.
И еще один нюанс: Wayfire требует для работы «управление сессиями», которым обычно занимается logind, который завязан на работу systemd.
Тут его нет, поэтому нужен еще seatd — легковесная замена logind.
Поэтому установка будет выглядеть так:
apt install wayfire seatd xwayland
Для работы wayland-систем нужно определить переменную XDG_RUNTIME_DIR, указывающую на католог с данными сессии пользователя.
Поскольку не используется logind, который бы ее создавал — создадим вручную, записав всё это в скрипт startw (по аналогии с startx):
#!/bin/sh myid=$(id -u) dir="user${myid}" mkdir -p /tmp/${dir} XDG_RUNTIME_DIR=/tmp/${dir} ; export XDG_RUNTIME_DIR export XDG_SCREENSHOTS_DIR=Pictures/Screenshots pulseaudio --start wayfire :0 pulseaudio --kill
Здесь создается нужный каталог, а также по аналогии с .xinitrc запускается pulseaudio
(на самом деле такой скрипт — это скорее хорошо, т.к. ПОТОМ нам понадобится установка некоторых переменных, например таких как XDG_SCREENSHOTS_DIR для grimshot — это удобно делать как раз здесь)
Еще нюанс: нужно проверить каталог /dev/dri
ls -l /dev/dri
total 0
drwxr-xr-x 2 root root 100 Mar 19 09:04 by-path
crw-rw—- 1 root video 226, 0 Mar 19 09:04 card0
crw-rw—- 1 root video 226, 1 Mar 18 23:17 card1
crw-rw—- 1 root render 226, 128 Mar 18 23:17 renderD128
Пользователь, под которым работаем, должен состоять в группах video и render.
Делается по аналогии с /dev/snd
Вот теперь можно запускать, если всё ОК — получим «черный экран».
Выход — Ctrl-Alt-BS
Просто по умолчанию там предполагается запуск программ, которые еще не установлены — поэтому на экране ничего нет.
Настроечный файл — .config/wayfire.conf, и его нужно создать:
[input] # поддержка языка - как и в Иксах xkb_layout = us,ru xkb_options = grp:caps_toggle,grp_led:caps [output:HDMI-A-1] # разрешение экрана и отключение энергосбережения # энергосбережение сбивает расположение окон mode = 1920x1080@60 position = 0,0 transform = normal scale = 1 dpms = off [core] xwayland = true no_dynamic_outputs = true [command] # запуск терминала Win + T, как в WindowMaker binding_terminal = <super> KEY_T command_terminal = sakura # по умолчанию запускается alacritty, но # в Иксах с ним могут быть проблемы - не ставили # запуск программ через wofi binding_launcher = <super> KEY_F2 command_launcher = wofi # Screen locker binding_lock = <super> KEY_L command_lock = swaylock -f -c 002020 # это команды которые не делают ничего. # блокировка ненужных реакций на скролл binding_sc1 = SCROLL_UP command_sc1 = true binding_sc2 = SCROLL_DOWN command_sc2 = true binding_sc3 = SCROLL_RIGHT command_sc3 = true binding_sc4 = SCROLL_LEFT command_sc4 = true # Screenshots # SYSRQ - это кнопка PrintScreen binding_screenshot = KEY_SYSRQ command_screenshot = /usr/bin/grimshot save area binding_screenshot_interactive = <shift> KEY_SYSRQ command_screenshot_interactive = /usr/bin/grimshot save screen
Это просто небольшой кусок с достаточно важными настройками: установка раскладки клавиатуры, выхода на экран, запуска терминала — как и какого, ну и несколько нюансов типа нестандартного названия кнопки PrintScreen или способа блокировать нежелательные реакции (смена окон вместо прокрутки содержимого в них, например).
Детальное описание: https://github.com/WayfireWM/wayfire/wiki/Configuration
Также можно посмотреть файлы /usr/share/wayfire/metadata/*xml, в них несложно разобраться — какие именно плагины поддерживаются и с какими настройками/
Если коротко — установлены такие же точно хоткеи как в WindowMaker, запускается тот же терминал sakura, такой же фон «рабочего стола».
Сокращены периоды анимации — оно только при демонстрации выглядит красиво, а вот работа от этого торозит. Но и совсем убирать не обязательно.
Строка состояний — waybar, меню — wofi, установка фона — swaybg, блокировка экрана — swaylock, скриншоты — grimshot.
Установим это всё:
apt install waybar wifi swaybg swaylock grimshot
Теперь можно запускать любую среду:
Иксы — startx

Wayland — startw

И та и другая работают на этом железе достаточно быстро, а с одинаковыми настройками хоткеев и программ разницы почти нет.
В Wayfire вроде бы поприятнее переключение окон, явно задействовано GPU.
В следующей части: установка рабочих программ, приведение их внешнего вида к единому стилю, некоторые нюансы и баги.
ссылка на оригинал статьи https://habr.com/ru/articles/892362/
Добавить комментарий