DIY Linux 桌面:让电脑再次快速运行
大家好!我是大聪明-PLUS!
我曾经从 Windows 转到 FreeBSD,包括因为 FreeBSD 在相同硬件上运行速度更快,并且不需要手鼓跳舞,因为通常情况下,从头到尾所需的一切都已配置好。
然后是 Linux——因为它有更好的硬件支持,而且总的来说,人们不想再回到 Windows。
但随着时间的推移,Ubuntu 的最新版本在缓慢性和不可预测性方面与 Windows 非常相似。然后,人们又想用电视盒打造一个便捷的桌面……
原则上,我找到了一个为我的电视盒构建的现成的 Armbian 版本,它预装了 XFCE 桌面——但尽管 XFCE 被认为是“轻量级”的,结果却发现它不够轻量,没有达到我的期望。Windows
运行速度明显很慢,总的来说,一切都不太对劲……
尽管它“小巧”,但这台电脑的性能应该相当不错:4GB 内存,4 核 1.5 GHz 处理器,这些配置曾经普遍难以企及,但现在“一切正常”,而且运行速度很快,即便是在速度慢得多的硬件上。
问题出在哪里?ARM 处理器从原理上来说真的慢吗?
总的来说,我决定从零开始组装一台“台式机”。嗯,差不多了。
(除了纯粹的“硬件”部分,其他一切都适用于任何台式电脑和笔记本电脑)
要求很简单:
- 大屏幕
- 最小空间要求
- 无线,除网络之外的几乎所有功能
- 多窗口环境
- 终端仿真器(shell、vim、MidnightCommander)
- 一些图形(Gimp)
- arduino 软件
- Office
- 打印到打印机
- 浏览器
- 用于绘制印刷电路板的软件(Fritzing)
- 视频播放器、音乐、耳机 - 仅此而已
我马上就会谈论最终版本——因为中间版本由于各种原因不合适而被拒绝了。
硬件
以基于 H618 处理器的 Z8 电视盒作为基准。为了进行比较,我们在 H616 和 rk3528 等其他设备上进行了类似的测试:结果显示,H618 的图形渲染效果最佳,略逊于 H616,而 rk3528 的图形渲染效果最差。尽管从“计算机”的角度来看,rk3528 的运行速度最快。也就是说,它适合用作服务器,但不适合用作台式机。
屏幕——22英寸电视,屏幕分辨率为1920x1080。为什么是电视?因为它可以通过HDMI播放声音。过去几年,我已经很不习惯眼睛能看到像素了,以前我们是怎么在这样的显示器上工作的呢?
桌面空间的问题,用旋转显示器支架解决了。这种支架固定在桌子边缘,可以随意旋转屏幕,同时桌面本身也保持空置,不会造成任何杂乱。
哇,这以前从未发生过。
带触控板的无线全尺寸键盘可轻松收纳,节省空间。
电池续航时间超长,惊喜不已。
盒子上只有一个USB接口能用——当然,我可以在DTB里找找,试试能不能打开第二个——但我太懒了,结果发现用一个扁平的USB集线器,连着“主机”一起插到显示器上更方便。
结果发现,它竟然是一个简洁的“一体式”集线器。
这款型号没有内置WiFi和蓝牙,不过现在市面上有很多不同的USB适配器,可以轻松解决这个问题。
系统
以 Armbian-unofficial_24.5.0-trunk_Transpeed-8k618-t_bookworm_edge_6.7.12.img.xz 程序集为基础。默认情况下,安装后仅占用约 2 GB 的空间(对于既不是 RAM,也不是 ROM,也不是磁盘的东西,正确的名称应该是什么?)。
登录密码输入行,文本模式,对于服务器来说还不错,但我需要一个桌面环境来操作。同时,我的任务是尽可能避免任何“桌面环境”,主要是因为集成:当一个程序的运行依赖于另一个程序的运行时,替换其中一个程序可能会导致不可预测的后果。
当然,也因为现代桌面环境会拖累一堆各种各样的垃圾,其中一两个程序是必需的。而且 emmc“磁盘”上的空间不是弹性的。
然而,拒绝“单一集成系统”可能会导致一些有趣的故障,因此我们立即禁用了所有不必要的程序。例如,我们不得不完全禁用 systemd。
在 Debian 中,这大致如下:清除软件包缓存:
apt clean
下载将系统转换至 SystemV 模式所需的文件
apt --download-only install sysvinit-core isc-dhcp-client
让我们切换到单用户模式:
systemctl rescue
安装下载的文件:
apt install /var/cache/apt/archives/*.deb
然后重启。这样,我们就得到了经典的 SystemV 模式,它包含运行级别、服务启动/停止脚本。
为什么好老?
重点是启动不同的守护进程和脚本变得更加可预测和透明:有一个按特定顺序启动的特定脚本列表 - 并且由您决定启动什么以及何时启动或不启动,并且它们位于一个地方 - /etc/init.d
从那里已经有用于启动和停止不同运行级别的符号链接: /etc/rcX.d
不存在的东西就不会启动,如果存在的东西没有启动,你总能找到原因。
同时,日志也恢复了正常,不再是单个带有过滤器的日志转储,所有信息都各归其位。
(虽然有些人喜欢相反的做法……)
然而,现在,例如,要启动网络,你需要付出一点努力并写下
/etc/network/interfaces:
...
auto end0
iface end0 inet dhcp
...
或者添加到 /etc/rc.local
命令中
dhclient end0
基本上,你自己做决定,告诉计算机它到底应该做什么。
这看起来可能比较复杂——但它不会在不该做的时候自行采取行动。
安装 X-windows
我只需要图形系统来显示窗口和启动程序,所以一个简单的窗口管理器就足够了。简单来说:X 服务器在屏幕上绘制内容,程序在其窗口中绘制内容,窗口管理器管理窗口:创建、移动和关闭它们。它不执行任何特殊操作,因此实际上不会降低速度。
WindowMaker 已经证明了自己是一款优秀的窗口管理器——一款极简主义的窗口管理器,内置菜单、可自定义的热键,以及通过名称启动任何程序的功能。
当然,还有更简约的窗口管理器,总的来说,X 在这方面拥有很好的实验空间。
但为了正常运行,您还需要一个终端仿真器:
事实上,标准的终端是 xterm,但不妨先说说——最好的终端是 sakura,它可以完美地替代 xterm。
默认情况下,没有这一个,所以我安装了 sakura。
要从命令行运行 X,您需要 xinit 软件包,其中包含启动脚本。
当然,您还需要 X 服务器本身及其所有标准模块。因此,所有这些软件包的安装方式如下:
apt install xserver-xorg xinit wmaker sakura
我们以 root 身份运行 X-server 来检查其运行情况:
X :0
应该会显示黑屏,这意味着一切正常。转到另一个控制台(Ctrl-Alt-Fx 或通过 ssh)并终止 Xorg 进程。
或者它将不起作用并会写入可以在类似 /tmp/.X0/log 的日志中查看的错误 - 然后您需要看看它不喜欢什么......
现在我们以普通用户身份登录,在我们的目录中创建一个包含一行内容的文件 .xinitrc:
wmaker
我们尝试运行:
startx
WindowMaker 应该启动了。
打开菜单 - F12,菜单中有一个“运行”项 - 按下它,输入 sakura,终端就会打开。
在“默认”菜单中,xterm 很可能会被指示为终端,但我们没有设置它,所以现在就是这样,现在我们需要配置一切。
当然,“默认”视图是马马虎虎的 - 但可以稍后进行配置。
屏幕左上角(通常)是安装程序的图标。这个程序确实很老了,所以界面上有很多问题——不过你至少得用一次。虽然它很老了,但一切正常。实际上,你只需要一个菜单就能启动主程序并设置快捷键。
它支持多种“屏幕”、一种平铺(将两个窗口垂直或水平并排放置)、最大化/最小化等等。
剩下的就是配置背景、颜色和菜单外观,以及更美观的字体——仅此而已。它能够出色地完成窗口管理任务,这就是您所需要的一切。您需要的一切都可以单独配置。
WindowMaker 设置 - 位于目录~/GNUstep/Defaults
、WindowMaker 文件和 WMRootMenu 中。
这些简单的文本文件可以手动编辑,例如,批量替换字体或调整程序列表。
有些操作比点击“安装程序”图标更简单。
WindowMaker 配置示例
当然,从头开始写这个是愚蠢的,但如果您只需要纠正字体或颜色,那么为什么不在文本中纠正它们呢?
背景填充可以设置为纯色、两点和三点渐变以及颜色本身 - 均采用“rgb:70/82/af”和“#7082af”结构
按钮修饰符:Control、Shift、Mod1(Alt)、Mod4(Win、Super)。
字体
X 支持 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 以标准方式配置。在启动 wmaker 之前的启动脚本 .xinitrc 中,设置布局:
setxkbmap -layout us,ru -option grp:caps_toggle,grp_led:caps
这样就可以使用 CapsLock 键切换布局,并通过大写字母指示灯显示状态
。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”,组中应该有一个组“音频”
某些应用程序(例如浏览器)需要使用 pulseaudio。安装:
apt install pulseaudio pavucontrol
要 .xinitrс
进行更改:
...
pulseaudio --start
wmaker
pulseaudio --kill
...
我们进入startx图形,启动终端,检查:
paplay /usr/share/sounds/alsa/Front_Center.wav
如果不需要屏幕消隐功能,也可以禁用它。在启动 wmaker 之前,在同一个 .xinitrc 文件中添加:
xset s off -dpms
总的来说,初始设置已经完成,剩下的就是安装程序和配置菜单。不过很明显,一切都进行得相当快。
几个实用程序: - 屏幕锁定 - xsecurelock - 屏幕截图 - maim - 时钟 - wmclock - 有趣的处理器负载指示器 - wmfire
Wayland
X 很棒,因为它几乎可以在所有硬件上运行。不过 Wayland 现在很流行——嗯,它也能在这里运行。
无需赘述,这里的逻辑如下:使用一个“作曲家”,它结合了“图形服务器”和“窗口管理器”的功能,因此任务归结为启动这个“作曲家”。
与 X 不同的是,它的选择并不多:堪称典范的 Weston、基于磁贴的 Sway、类似 Compiz 的 Wayfire、单任务的 Kiosk,以及同样庞大的 Gnome/KDE。
似乎还有其他东西,但所有东西都是实验性的,并且是自行组装的。
为了支持纯 X 应用程序,您还需要在 Wayland 编辑器中运行的 Xwayland。
我们尽量避免使用怪物,磁贴管理器是给业余爱好者用的,Weston 的 x-applications 出了点小故障——所以我们安装了 Wayfire。
其实,如果有人还记得 Compiz 的话——它几乎和 Wayfire 一样,只是速度更快。
还有一点需要注意:Wayfire 需要“会话管理”才能工作,这通常由 logind 完成,而 logind 的工作与 systemd 的工作紧密相关。但
这里不需要,所以你还需要 seatd——一个轻量级的 logind 替代品。
因此,安装过程如下:
apt install wayfire seatd xwayland
为了使 Wayland 系统正常工作,您需要定义一个指向XDG_RUNTIME_DIR
包含用户会话数据的目录的变量。
由于 logind 不用于创建该变量,因此我们将手动创建它,方法是将所有内容写入 startw 脚本(类似于 startx):
#!/bin/shmyid=$(id -u)
dir="user${myid}"mkdir -p /tmp/${dir}
XDG_RUNTIME_DIR=/tmp/${dir} ; export XDG_RUNTIME_DIRexport XDG_SCREENSHOTS_DIR=Pictures/Screenshotspulseaudio --start
wayfire :0
pulseaudio --kill
这里创建了必要的目录,并通过与 .xinitrc 类似的方式启动了 pulseaudio
(事实上,这样的脚本相当不错,因为接下来我们需要设置一些变量,比如 grimshot 的 XDG_SCREENSHOTS_DIR - 在这里这样做很方便)
另一个细微差别:您需要检查目录 /dev/dri
ls -l /dev/dri
总计 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]
#
binding_terminal = <super> KEY_T
command_terminal = sakura#
# #
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
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 按钮的非标准名称或阻止不需要的反应的方法(例如,更改窗口而不是滚动其中的内容)。
简而言之 - 安装与 WindowMaker 相同的热键,启动相同的 sakura 终端,使用相同的“桌面”背景。
动画周期缩短了 - 仅在演示时看起来不错,但工作速度因此变慢。但无需完全移除它。
状态栏——waybar,菜单——wofi,背景设置——swaybg,屏幕锁定——swaylock,截图——grimshot。
让我们安装它:
apt install waybar wifi swaybg swaylock grimshot
现在您可以运行任何环境:
X - startx
Wayland - startw
两者在此硬件上运行都非常快,并且使用相同的热键和程序设置几乎没有区别。
Wayfire 似乎具有更好的窗口切换体验,GPU 显然参与其中。