YaeBlog/YaeBlog/source/posts/daily-linux-2.md

92 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 日用Linux挑战 第2篇 Wayland
date: 2023-07-23T11:44:34.0000000
tags:
- 杂谈
- Linux
---
使用`Linux`6个月我成功戒掉了原神。
<!--more-->
## 使用Wayland开启桌面环境
在上一篇[文章](https://rrricardo.top/blog/2023/03/08/daily-linux-1/)我尝试在`kde`桌面环境下使用`wayland`显示协议,当时的尝试虽然失败了,却为我这次迁移到`wayland`打下了良好的基础,例如我将输入法从迁移到`fcitx5`。
最近恰好被平铺式的窗口管理器种草又在B站上看见一个动画绚丽的`wayland`合成器——[Hyprland](https://hyprland.org/),当即脑袋一热,就把`kde`干掉,装上了`hyprland`。
![img](df4211f6be2724b3b4725f7ce5a4078818844857.avif)
安装`hyprland`的过程非常舒适,`hyprland`被打包为一个单独的二进制文件,使用`pacman`安装之后直接在`tty`下执行:
```bash
Hyprland
```
就可以打开一个干净到极致的桌面环境——没有图标,状态栏等等传统桌面应该有的一切,只有一张简单的壁纸。然后我就发现我完全不会使用这个桌面,虽然鼠标还是如预期一般出现了,但是没有任何用处,`hyprland`的一切都需要使用键盘启动。在对着`hyprland`8个大字发愣5秒钟之后我便屁滚尿流的滚回了`tty`。虽然文档中说明了在默认的配置文件中使用`win+q`的组合键打开终端,但是默认的终端应用程序是`kitty`,然而这个冷门的终端程序在我的电脑上自然是没有的(虽然我在使用过后觉得这个中断程序秒杀我之前用过的全部终端)。看到简陋但是熟悉的`tty`仿佛见到了亲人,我一波`sudo pacman -S kitty`,一边看着进度条飞涨一边感谢`archlinux`。迅速按下`ctrl+shift+F1`,回到忠诚的壁纸画面,不过这次,轻轻按下`win+q`,一个终端窗口如宿命一般出现!
> 上面因为作者刚考完期末神智有点不正常,还请~~根本不存在的~~读者海涵。
在`Linux`下拥有了终端就好办了。首先装上`App Launcher`——没有这玩意儿我似乎就只能从终端里启动应用程序,显然是十二分的不方便。在一番比较之后,我在官方文档中选择了`fuzzel`,看上去挺好看的。
> 本来这里想截一张`fuzzel`的图,但是似乎他们的主页挂掉了(
安装了`App Launcher`之后,至少可以打开浏览器,愉快的复制粘贴安装了。剩下的安装过程就按下不表,基本上按照官方文档的`Useful Utilities`进行,在中间选择自己需要的软件的进行安装。然后便是根据配置文件的说明对于外观和使用快捷键进行调整,以及配置壁纸软件`hyprpaper`和状态栏组件`waybar`。具体的配置文件我都放在了自建的`git`服务器上,可以在[这里](https://git.rrricardo.top/jackfiled/dot-config)查看。
### Wayland软件兼容性
跳槽到了新的`wayland`显示协议,最关心的自然是各种软件是否能在`wayland`下正常的工作。
首先是各种浏览器。在我安装的这段时间里2023年5月`microsoft edge`浏览器是基本不能在`wayland`模式下工作,一进入全屏模式就会自动崩溃退出,这对于日常电脑刷视频的我来说简直不能忍受。幸好,`firefox`浏览器在`wayland`模式下工作正常,不愧是和`Linux`关系最好的浏览器。再通过一系列的测试,`chromium`系列的浏览器在`wayland`下的工作状态都不太好,如果需要在`wayland`环境下使用`chromium`系列的浏览器,建议还是运行在`xwayland`模式下。
然后是各种开发工具。我日常使用的`jetbrains`IDE和`VSCode`都工作正常,虽然是工作在`xwayland`模式下。
各种在学习过程中遇到的工具软件基本上都工作运行良好。当然因为没有设置缩放的问题而导致字体都很小。因为如果在配置文件中设置缩放之后会导致字体发虚。下面的截图就是我将我的2K显示屏设置为150%缩放的效果,~~虽然在截图中的效果不明显~~。目前在常用软件中唯一让我十分不满意的软件是`wps`,使用体验完全无法和`offices`相提并论,目前我正在研究使用`wine`运行`offices`,如果成功了就再水一篇博客庆祝一下。
![image-20230702205919301](image-20230702205919301.webp)
> 最新的进展是使用`wine`没法安装学校提供的`office 2021`,同时我又不愿意使用古老的`office`版本,但是我发现一个称作`onlyoffice`的第三方软件蛮好用的,等我试用一段时间再说。
>
> 但是`onlyoffice`的最新版本和`wlroots`合成器似乎有点八字不合,我现在是回退到`7.2.1`版本正常使用,详情见这个[issue](https://github.com/ONLYOFFICE/DesktopEditors/issues/1208)
最后就是各种游戏的兼容性了。原神完蛋了。虽然这和`wayland`关系并不是很大,米哈游自己也罪大恶极,但是我换成`wayland`之后的游戏流畅度下降明显,只能眨眼补帧,在硬顶了几周之后我绷不住退游了。目前还不知道是由于原神本身一坨大便的优化还是`wayland`导致的性能下降。而我在`steam`上的各种游戏工作也不是很正常,尤其是各种需要全屏的游戏,比如`CS:GO`,可能是由于我使用外接屏幕的问题。但是`GalGame`类的游戏就工作正常。
总的来说,这次切换到`hyprland`的使用体验还是非常不错的,平铺式窗口管理器也是提高生产力的利器。
### `Hyprland`仍不完善
有得必有失,`hyprland`乃至于`wayland`目前作为一个桌面环境最大的问题就是相关生态仍不完善。这里的生态甚至都不是指对于`wayland`支持之类的东西,而是像系统设置、锁屏界面、状态栏之类的东西。虽然这样说可能有点对于`hyprland`的要求过高了,但是现在这种东拼西凑的构成一个桌面环境给人的体验不是很好,譬如使用`waybar`作为状态栏,`swaylock`作为锁屏界面,`kwallet`作为密码存储器。其中不少软件还都处于一个十分简陋的阶段,例如`swaylock`仅显示一张图片作为界面,甚至连个输入密码的界面都没有。
`hyprland`对于弹出窗口的支持不是很好,尽管这就是平铺式窗口管理器的设计思想。但是在像`idea`之类的编程工具中,弹出窗口是非常常用的功能,不能正常的显示弹出窗口或者显示的位置不对会导致严重的生产力下降。经过测试,当只使用一个显示屏是,可以正常的进行弹出窗口的显示,但是当链接多个显示器时,弹出窗口的位置就变得奇怪起来。
## `amdgpu`导致的相关问题
从我在这台电脑上安装`Linux`之后,便一直会出现图形界面卡死的问题。具体表现为图形界面停止响应,但是通过`ssh`等仍能正常远程链接,大小写锁定正常,使用`Ctrl+Alt+F3`组合键切换到其他`tty`的方式有一定的概率可以从卡死中恢复,但是也存在一定的可能性只能通过强制重启解决。
通过分析日志中的错误信息,大致锁定一下几个`issue`可能和这个问题有关:
- [random amdgpu hangs](https://gitlab.freedesktop.org/drm/amd/-/issues/2443)
- [flip_done timeout](https://gitlab.freedesktop.org/drm/amd/-/issues/2006)
- [ring sdma0 timeout](https://gitlab.freedesktop.org/drm/amd/-/issues/2220)
同时在`raddit`和`archlinux forum`上都存在大量的讨论均是怀疑为内核的问题。总结一下这个问题似乎和较新版本的内核和AMD的新`rdna2`显卡有关,同时是否链接外接显示器也有着不同的故障表现。而且,随着`linux kernel`不断的升级,报错信息似乎也在变化,~~虽然因为我的系统日志被自动覆盖,不能提供详尽的日志信息~~。
在某一篇讨论中很抱歉我忘记了具体页面有人指出这可能和内核对于CPU电压的调控有关在切换到AMD新发布的CPU频率调节驱动`amd p-state`之后,这个问题就不再出现了。查询[wiki](https://wiki.archlinux.org/title/CPU_frequency_scaling)可以发现,这个驱动目前并没有默认驱动,而是需要通过添加内核参数的方式启动。我使用`grub`作为启动程序,在配置文件`/etc/default/grub`的`GRUB_CMDLINE_LINUX_DEFAULT=`末尾添加新的启动参数`amd_pstate=active`,重启之后查看当前驱动:
```
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
amd-pstate-epp
```
目前我已经启动这个新的驱动程序一周时间了,上述问题没有在出现过。