Linux-десктоп своими руками: Make Computers Fast Again

от автора

Уже говорил как-то, что в свое время перешел с 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»

px = pt * DPI / 72pt = px * 72 / DPI

Раскладка клавиатуры

Клавиатура настраивается стандартно, через 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *