桌面初始化
最近忙的团团转,现在才有时间写。我脑子的状态已经和糨糊差不多了,所以不用期待太多。
先总结一下,然后你们爱看就看,不看就关掉。在只有1个核显的主机情况下,想要能硬解的HTPC,又想要能硬解的streaming server,又想隔离它们,这想法过于天真。
Wayland虽然吹着天花乱坠,但和X11比起来其实是半斤八两,谁也赢不了谁。Wayland就是那群开发者不喜欢X11的集中管理才搞的,所以Wayland更自由,开发者想怎么开发都行。但就是这自由让Wayland compositor分家了。不是所有开发者都有能力可以从Wayland协议开发,他们更多的是从框架开始,毕竟Wayland只是个协议,连Hello World都没有。Wayland compositor大致可以分3家:Gnome、KDE、Wlroots。G和K,大家都很了解,但是它们不支持嵌套Wayland compositor,而且在权限不足的unprivilege container中还不能成功安装,所有和我们的折腾无关了。据我所知,只有大公司才用G和K的Wayland 框架开发,剩下的民间的基本都是W了,那我们只剩W可以折腾了。但是不知道为什么那群开发者为什么那么喜欢平铺设计,导致能用的堆叠设计的compositor只有wayfire和labwc这2个。虽然hikari也写着是堆叠,但是这东西我试了,既不如平铺高效,又不如堆叠易操作,评价就是反人类操作。wayfire和苹果一样喜欢搞全家桶,所以安装wayfire需要把全部的依赖全装了才能正常使用,而我只在arch类linux的容器中成功过。但是因为wayfire的果冻一样的特效把我恶心到了,还不知道在哪里关,所以拜拜,你们爱用就用,反正我不用。然后只剩labwc了,但是这东西还没过1.0大关,所以不能期待有多稳定,而且config得改,剩下的装饰还得自己来,相当麻烦。用了几个月,只有在全屏状态时发生以下的事,在看4k h265 10bit SDR的哥斯拉差不多每10分钟左右爆显存,在看4k h265 8bit的庆余年只有1次在快进时爆了显存,最奇怪的是用firefox在b站看1080p的视频时会卡住,表现为只有声音,视频是不会动的,但是鼠标在非视频的黑框里可以自由移动,而且就算卡了那应该也能暂停吧,但是我按多少次空格,它都不停。B站开了大会员还会卡缓存,我可是千兆带宽,所以肯定是它的服务器有问题。Wlroots 好像不打算支持display manager,还得在tty登录。综上所述,wayland能用,但只是能用而已。
X11的表现也不佳。因为全部都靠X11集中渲染,所以什么都会混在一起。在用mate嵌套xfce时,混在了一起,进入了你中有我,我中有你的状态,难以操作。在用openbox嵌套xfce时,也混在了一起,切换workspace时也是混杂状态,但和平常的x11操作逻辑相同。而且还得用xhost完全放开才能成功,但是xhost会降低安全性,理论上是可以控制的,但是我找不到方法。最有问题的还是嵌套,在平铺设计里嵌套堆叠设计,那堆叠设计的桌面也会按照平铺设计来行动,操作起来相当反人类。而且在关闭被嵌套的x11时,原x11会崩溃。x11原生支持display manager,所以无需使用命令行登录,而且可以自动登录。综上所述,x11能用,但是问题多多。
勇者,如果你没被吓走,现在就来跟我走上lxc个性化折腾之路吧。
关于incus的安装和容器的创建在之前的长篇里写了,我就不重复了。
现在就来聊聊labwc的配置,存在于~/.config/labwc/。关于environment,它有和没有都一样,因为环境可以在.bashrc里设置。需要记住的是不可以在.bashrc设置WAYLAND_DISPLAY=wayland-1,要不然应用就会出现在寄宿的Wayland compositor里,而不是嵌套的Wayland compositor。可能需要的如下:
# This allows xdg-desktop-portal-wlr to function (e.g. for screen-recording)
XDG_CURRENT_DESKTOP=wlroots
XDG_SESSION_DESKTOP=wlroots
XDG_SESSION_TYPE=wlroots
# Force firefox to use wayland backend
MOZ_ENABLE_WAYLAND=1
# Set cursor theme.
# Find icons themes with the command below or similar:
# find /usr/share/icons/ -type d -name "cursors"
# XCURSOR_THEME=breeze_cursors
# Disable hardware cursors. Most users wouldn't want to do this, but if you
# are experiencing issues with disappearing cursors, this might fix it.
WLR_NO_HARDWARE_CURSORS=1
# For Java applications such as JetBrains/Intellij Idea, set this variable
# to avoid menus with incorrect offset and blank windows
JAVAAWT_WM_NONREPARENTING=1
QT_QPA_PLATFORM=wayland-egl
QT_WAYLAND_FORCE_DPI=physical
QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
ELM_DISPLAY=wl
SDL_VIDEODRIVER=wayland
SAL_USE_VCLPLUGIN=gtk3
GTK_USE_PORTAL=0
MOZ_ENABLE_WAYLAND=1
MOZ_DBUS_REMOTE=1
XDG_SESSION_TYPE=wayland
intel_iommu=igfx_off
LIBVA_DRIVER_NAME=i965
然后是menu.xml,需要更改的只有root-menu,这就是用鼠标在桌面点击时出现的菜单。格式非常简单。item label就是出现在菜单上的名字,随便取个就好了。我相信你看的懂这是什么意思action name="Execute"。你可以把command理解为可以在shell里执行的命令。
<item label="App launcher">
<action name="Execute" command="nwggrid" />
</item>
rc.xml就比较复杂了,我是在openbox那看的。
先来看下theme部分。name就是存在于文件系统的theme name。我在gayhub上找到了说明,撸出了一个,但是因为我显示屏没有调过色,所以在我的笔记本和电视上看到的颜色不一样,所以我也不能评价这配色好不好看,但至少不伤眼就是了。至于怎么搞自己的theme太过复杂,不想写。cornerRadius就是边角的锐利程度,0就是90度,太直角不够好看,但是太圆润了,2个窗口并排也难看。font选自己喜欢的就好,大小也得根据个人爱好设置。titleLayout就相信我用NLIMC,这排版和windows的排版一样,容易接受。但是这theme是openbox的,如果你开了GTK4或者GTK+或者qt的应用就会发现它们用自己的theme无视你的设置,然后桌面上的应用外观就会百花齐放,这得归功于GUI框架的自由。
<theme>
<name>orchid</name>
<cornerRadius>5</cornerRadius>
<font name="Noto Sans Mono CJK SC" size="16" />
<titleLayout>NLIMC</titleLayout>
</theme>
我们不需要desktops,因为labwc不支持workspace,就算你们在文档里找到了可能关于workspace的内容,并不表示它能用。至于keyboard的内容我就完全没改,因为我记不住那么多快捷键。mouse的内容也不需要改,只要点击桌面出现菜单它就完成了自己的工作了,除非你们非改不可,那就改focus,你们试下就明白了。
<focus>
<focusNew>no</focusNew>
<focusLast>no</focusLast>
<followMouse>no</followMouse>
<focusDelay>200</focusDelay>
<underMouse>no</underMouse>
<raiseOnFocus>no</raiseOnFocus>
</focus>
就算搞了这么多,但是现在开labwc也还是黑色的屏幕加上一个鼠标,是不是非常劝退。个性化总得设置桌面背景,但是在哪设置呢,这就得从X11开始说起。在X11中,在用鼠标右键不是会跳出菜单让你改桌面背景吗,你知道自己右键在哪吗,是在file manager(文件管理器)里哦,是不是很神奇,在桌面的文件啊应用啊全存在Desktop文件夹里哦。那在Wayland里也这么设置吧,哇啦,成功了,但是现在怎么开其它应用呢,平常在桌面单击的labwc的菜单怎么点不出来了,右键出来的居然是file manager的菜单,肯定是少了taskbar的原因。装上taskbar,嗯,为什么file manager一直出现在上面,随便啦。开个新应用,没有全屏,不小心点到了应用外面,额,为什么应用好像最小化了。其实应用并没有最小化,而是file manager被提到了最前面那层,把应用覆盖了。是的,X11那套并不能直接在Wayland上用,在Wayland得另外装个支持协议的background manager才行。但是background manager不是file manager,所以不可能在桌面放文件,只能显示背景图片,是不是非常操蛋啊。所以为了显示桌面背景,装个swaybg,你们也可以选其它的。
swaybg用法很简单,详细的可以看这里:https://man.archlinux.org/man/swaybg.1.en 。-i表示image,后面紧跟着要显示的图片的路径。或者可以选择-c,用颜色填充。-m表示mode,有中几个可以选:stretch, fill, fit, center, tile。至于>/dev/null 2>&1 &就不用理了,这是为了应用可以脱离terminal在后台运行才加上去的。
swaybg -i $HOME/Pictures/background.jpg -m fill >/dev/null 2>&1 &
我认为无论是平铺还是堆叠都需要taskbar。taskbar是什么呢,就是在windows最下面显示的任务栏,在linux里指的是显示应用的那栏,但是taskbar又必须存在于一个bar上面,但是这个bar又叫做什么呢,panel吗,我真不懂。讲真的,没了taskbar,我真不知道要怎么显示最小化的应用。在我的搜索结果里只有2个有用的taskbar,一个是waybar,另一个是sfwbar,虽然yambar可以显示taskbar,但是这taskbar是废物,点不了。2个都能用,都能个性化设置,但是waybar没有application launcher。waybar需要自己写css个性化,sfwbar直接用gtk3比较方便。因为我先搜到的是waybar,所以我就写waybar的,各位看喜好自己选。不过我比较推荐sfwbar,不用另外装字体。
waybar的配置在~/.config/waybar/。先来聊聊config,格式好像是json。 layer就是waybar出现在屏幕的第几层,我们当然要它在最上面那层了,要不然开个应用就覆盖了。
"layer": "top"
position就是waybar出现在屏幕的哪里,我喜欢它呆在最上面的,不像windows一样在下面。
"position": "top"
height和width不设置,让它们自动配置就好了,这样就能和屏幕一样宽,比图标稍微高点。
spacing就是图标间的距离,我觉得4刚刚好。
"spacing": 4
waybar可以分为3个部分:modules-left、modules-center、modules-right。所以你可以把module(图标是其中1种)按你喜欢的顺序摆放。我举个例子:
"modules-left": ["image#menu", "image#firefox", "image#file", "wlr/taskbar"]
至于module的设置太多了,我就写2个,剩下自己看:https://man.archlinux.org/man/waybar.5
为了可以直接在waybar上快捷打开firefox,我设置了一个 image module。 image#firefox就是名字,换成其它的像 image#1啊, image#2啊,都可以只要有 image#就行了。既然是 image,它就需要一张图片,把图片的路径粘进去就行了。 size的单位好像是pixel。 on-click就是我在图标上按鼠标左键就会触发命令,这命令不像labwc的menu.xml直接调用shell的命令,因为waybar没有shell的环境。所以这命令怎么找?很简单,在terminal里输which firefox就行了。
"image#firefox": {
"path": "/usr/share/icons/hicolor/32x32/apps/firefox.png",
"size": 20,
"on-click": "/usr/bin/firefox",
}
一眼就能看明白的东西,我也不知道怎么介绍。format就是怎么显示在waybar上面。tooltip-format就是鼠标悬浮在图标上会出现的小框。
"wlr/taskbar": {
"format": "{icon} {name} ",
"icon-size": 18,
"tooltip-format": "{title}",
"on-click": "minimize-raise"
}
接下来就说说style.css。相信我,waybar的css很简单的,比html的简单。这里就是设置字体和简单的style。
#waybar {
font-family: "Noto Sans CJK SC";
font-size: 18px;
}
#window {
padding: 0 1px;
}
window#waybar {
border: none;
border-radius: 0;
box-shadow: none;
text-shadow: none;
transition-duration: 0s;
color: rgba(217, 216, 216, 1);
background: rgba(180, 153, 255, 0.6);
}
window#waybar.solo {
background: rgba(35, 31, 32, 0.5);
}
window#waybar.empty {
/* display: none; */
}
@keyframes blink {
to {
background-color: #ffffff;
color: black;
}
}
只要你会css,一眼就会明白了。用taskbar来示范下。设置taskbar 的背景颜色和roundness。设置图标按钮的背景颜色和roundness和padding和margin。是不是一点都不难。
#taskbar {
background-color: lightyellow;
border-radius: 8px;
}
#taskbar button.active {
background-color: yellow;
border-radius: 4px;
padding: 2px;
margin: 2px;
}
#taskbar button {
background-color: transparent;
border-radius: 4px;
padding: 2px;
margin: 2px;
}
现在就来说说autostart。autostart会在你打开labwc时自动运行命令。没错,用法我前面就已经说过了。现在有下面2个就够了。
swaybg -i $HOME/Pictures/background.jpg -m fill >/dev/null 2>&1 &
waybar >/dev/null 2>&1 &
非常好,我把基础都写出来了,剩下要怎么个性化就怎么来。成品图长这样。如果各位懒得折腾,在我完成这长篇后,我会打包下配置发到网盘给各位下载。

空调救我命
校验提示文案
空调救我命
校验提示文案