前言
寒假有空折腾了,先是因为扩充根分区,分区表出现了一些问题。乱修了一遍把保存的系统镜像也整没了。好在最后用testdisk
救回来大部分数据,备份到移动硬盘中后被迫重装一次系统。在装完系统后把数据复制回来,这个时候产生了文件权限问题:所有文件都有可执行权限。正好最近在学习go,编写了一个程序来负责重新管理每个文件的权限。
func shouldKeepExecutable(filePath string) bool {
cmd := exec.Command("file", "--mime", filePath)
output, err := cmd.Output()
if err != nil {
fmt.Printf("Error running file command for %s: %v\n", filePath, err)
return false
}
outputStr := strings.TrimSpace(string(output))
fileType := strings.Split(outputStr, ": ")[1]
return strings.Contains(fileType, "executable")
}
func changePermissions(filePath string, wg *sync.WaitGroup) {
defer wg.Done()
if !shouldKeepExecutable(filePath) {
err := os.Chmod(filePath, 0644)
if err != nil {
fmt.Printf("Error setting permissions for %s: %v\n", filePath, err)
}
} else {
err := os.Chmod(filePath, 0755)
if err != nil {
fmt.Printf("Error setting permissions for %s: %v\n", filePath, err)
}
}
}
func processDirectory(rootPath string) {
var wg sync.WaitGroup
err := filepath.Walk(rootPath, func(path string, info os.FileInfo, err error) error {
if err != nil {
fmt.Printf("Error walking the path %v: %v\n", path, err)
return nil
}
if !info.IsDir() {
wg.Add(1)
go changePermissions(path, &wg)
}
return nil
})
if err != nil {
fmt.Printf("Error walking the directory: %v\n", err)
return
}
wg.Wait()
}
func main() {
var dirPath string
fmt.Print("Enter directory path: ")
fmt.Scanln(&dirPath)
processDirectory(dirPath)
}
处理完这些顺便重新参考了一下kde的配置流程,发现自己之前原来一直没装kde-applications
,原来一直都在用假的kde。后来把fcitx5的主题也换成了fcitx5-candlelight
中的macOS-light
,感觉比之前用的simple-theme
好看,也是用上mac主题了。
如下图所示:
之前经过群友安利,打算试一试hyprland和yazi,现在有时间了就来折腾一下hyprland吧(yazi不知道之后会不会懒得写配置过程…)。之前用过i3和chadwm(一个定制化的dwm),i3的状态栏配置比较难绷而且美化之后也不是很好看,chadwm窗口开多了就会卡顿,现在对hyprland还是挺有期待的。
安装和配置过程
我使用的linux发行版是archlinux。
首先通过包管理器安装hyprland和相关应用。
yay -S hyprland hyprpaper swaylock-effects waybar mako rofi-lbonn-wayland-git grim slurp swappy wl-clipboard cliphist
- 这里hyprland有两个版本:
hyprland
和hyprland-git
,带git的版本包含最新的commit,不带的版本则是最新的release,我选择了看上去更稳定的release版。 - hyprpaper是壁纸应用
- swaylock-effects是锁屏应用
- waybar是状态栏
- mako是通知栏
- rofi-lbonn-wayland-git是rofi的wayland版
- grim, slurp, swappy是截屏工具
- wl-clipboard, cliphist提供了wayland下的历史剪贴板功能
安装程序贴心地为我们自动配置好了Desktop Entry,不说了先hyprland启动!
启动完发现有很多问题,这也是意料之中。
网络
由于在kde中没有使用networkmanager作为网络服务,在wayland下需要重新配置其作为网络服务。
通过systemctl enable NetworkManager.service
来自动启动服务,接着通过nmcli device wifi connect ...
来连接路由器。
按键绑定
我使用neovim并把ESC键和CapsLock键交换了,这在xorg下直接执行setxkbmap -option caps:swapescape
即可。然而在wayland下这并不可行。
参考了一下其他大佬的博文
interception-tools通过在libevdev层修改按键事件响应来完成整个功能,我的需求用提供的插件caps2esc就能解决。
文档中说
/etc/interception/udevmon.d/*.yaml is also read if present
于是将以下配置放进/etc/interception/udevmon.d/caps2esc.yaml
即可。
- JOB: intercept -g $DEVNODE | caps2esc | uinput -d $DEVNODE
DEVICE:
EVENTS:
EV_KEY: [KEY_CAPSLOCK, KEY_ESC]
通过systemd自动启动udevmon:sudo systemctl enable udevmon.service
。
locale
/etc/locale变成en_US.UTF-8了,改为zh_CN.UTF-8即可。
屏幕分辨率
启动非wayland原生的应用时字体会变模糊,需要在.config/hypr/hyprland.conf中设置monitor=,preferred,auto,1
,其实就是把最后的scale设置为1即可。
再针对不同类型的程序设置对应的缩放比例:
- xwayland:执行
echo "Xft.dpi: 144 | xrdb -merge
- QT: 执行
export QT_WAYLAND_FORCE_DPI=144
- fctix5:通过fcitx5-configtool里面的附加组件-经典用户选项-固定wayland DPI来配置,调整为144
具体参考的这篇文章。
接下来开始配置快捷键和美化
快捷键绑定
类似i3和chadwm的设置,直接在.config/hypr/hyprland.conf里面写配置即可,基础的语法是bind key action
。
例如bind = $mainMod, Return, exec, $terminal
,其中mainMod = SUPER
,terminal = kitty
,类似bash的语法。其他衍生的绑定功能稍微看一眼也能知道什么意思。
修复声音
折腾了半天,最后发现是pipewire-pulse的配置文件因为重装系统丢失了,重新安装pipewire-pulse添加配置文件就正常了,实在难绷。
waybar美化配置
直接用别的大佬设计好的配置文件吧,以后如果有兴趣再自己设计。
壁纸
动态壁纸暂时还不是很需要,占用资源也比较多,先不折腾了。
写了一个类似chadwm的壁纸切换脚本,改用hyprpaper来切换壁纸。
至此所有的配置都完成了,等到后面使用过程中出现新的问题再来更新吧。