Hyprland 折腾记
Coldrain 在暑假期间心血来潮,突然想要给自己的 Archlinux 配一个 Hyprland 桌面,然而过程并非一帆风顺,遂作此篇。
1. Hyprland 的安装(手动)
参考 Hyprland 官网
这一部分采用手动构建的方法,因为官方的 WARNING 让小生担心使用包管理器会出岔子 💦
此外,为方便起见,下文安装部分均采用
aur
安装
安装依赖包,确保万无一失:
paru -S ninja gcc cmake meson libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite libxrender libxcursor pixman wayland-protocols cairo pango libxkbcommon xcb-util-wm xorg-xwayland libinput libliftoff libdisplay-info cpio tomlplusplus hyprlang-git hyprcursor-git hyprwayland-scanner-git xcb-util-errors hyprutils-git glaze hyprgraphics-git aquamarine-git re2 hyprland-qtutils
接下来,采用 CMake
构建 Hyprland
:
# 随便找一个地方就可以了
git clone --recursive https://github.com/hyprwm/Hyprland
cd Hyprland
make all && sudo make install
接下来:
meson subprojects update --reset
meson setup build
ninja -C build
ninja -C build install --tags runtime,man
2. 安装必要软件
该部分参考文档:https://wiki.hypr.land/Useful-Utilities/Must-have/
2.1 kitty
kitty
是 Hyprland
的默认终端模拟器,直接 paru
安装:
paru -S kitty
此外,kitty
的终端界面配置挺有说法的,小生非常推荐,具体可以参考 kitty 官方文档。
2.2 通知程序
如果你的系统上没有安装通知程序的话,这里刚好一并安装了(
paru -S dunst mako fnott swaync
2.3 pipewire(用于屏幕共享)
pipewire
虽然不是必需的,但是没有这个玩意就无法屏幕共享。
paru -S pipewire wireplumber
2.4 Qt Wayland 支持
paru -S qt5-wayland qt6-wayland
3. 安装第三方 Hyprland 主题
这里小生采用的是 end-4 主题,效果图如下:
话不多说,接下来直接开始安装,这里小生依然采用手动构建的方案(安装前请先开启代理):
# 随便找一个路径
git clone https://github.com/end-4/dots-hyprland
cd dots-hyprland
./install.sh
接下来就是官方的安装程序了,按照程序提示安装即可(时间较长且需要全程有操作,请留出足够的空闲时间安装)。
Coldrain 在执行
install.sh
的过程中,html2markdown
这个包始终安装失败。如果你在安装的时候也遇到了这个问题,此时请退出安装程序,安装
html2markdown-bin
这个包:paru -S html2markdown-bin
安装完成后,就可以启动 Hyprland
了:
- 在登陆界面切换至
Hyprland
即可
4. 配置代理(采用 V2raya 和 Proxychains)
在 Hyprland
中小生使用 V2raya
来作为代理软件,Xray
作为内核,首先执行下面指令安装:
sudo pacman -S v2raya xray
sudo systemctl enable --now v2raya # 启动并配置开机自启动
接下来要设置 V2raya
调用 Xray
内核(默认配置是调用 V2ray
内核,我们不使用 V2ray
也就没有安装),可参考官方文档,下面提供两种方法(只需要按一种设置即可,推荐第一种):
4.1 编辑修改 /etc/default/v2raya
配置文件
首先打开 /etc/default/v2raya
文件
sudo vim /etc/default/v2raya
然后找到 V2RAYA_V2RAY_BIN
和 V2RAYA_V2RAY_ASSETSDIR
两个环境变量,将其前面的 #
去掉,并将其值按如下修改
V2RAYA_V2RAY_BIN=/usr/bin/xray
V2RAYA_V2RAY_ASSETSDIR=/usr/share/xray
其中 /usr/bin/xray
指的是 xray
可执行文件,而 /usr/share/xray
指的是 xray
数据文件目录(包含了 geosite.dat
和 geoip.dat
文件)
然后重启 v2raya
服务即可
sudo systemctl restart v2raya
4.2 编辑修改 systemd
管理的配置文件
新建一个文件夹 /etc/systemd/system/v2raya.service.d
,然后进入文件夹新建一个文件 xray.conf
,类似的,写入以下内容:
[Service]
Environment="V2RAYA_V2RAY_BIN=/usr/bin/xray"
Environment="V2RAYA_V2RAY_ASSETSDIR=/usr/share/xray"
然后执行下面指令重新加载 V2rayA
服务即可:
sudo systemctl daemon-reload && sudo systemctl restart v2raya
然后我们直接在终端执行 firefox
进入火狐浏览器,然后访问 http://127.0.0.1:2017
进入 V2raya
配置界面,导入自己的配置规则
点击右上角的设置,关闭 透明代理/系统代理
选项,然后将 规则端口的分流模式
选为 RoutingA
,随后点击右边的 配置
选项,写入以下内容(用默认配置不改也行,也可以根据自己的需要更改):
default: proxy
# write your own rules below
domain(geosite:cn)->direct
ip(geoip:private)->direct
ip(geoip:cn)->direct
然后点击保存,注意此时这些规则并不会生肖,因为 V2raya
为 socks
协议和 http
协议设置了带分流规则的端口(该端口进来的流量会按照分流规则分流)和不带分流规则的端口(该端口进来的流量并不会按照规则分流),而且默认只设置了 http
的分流端口,因此需要我们下面手动设置带分流规则的端口。
我们可以点开设置界面左下角的地址与端口
选项,然后填写 带分流规则的 socks 端口
并保存,如下所示:
4.3 编辑 ~/.config/hypr/hyprland.conf
配置文件
在 ~/.config/hypr/hyprland.conf
配置文件中写入如下内容以配置代理端口:
env = ALL_PROXY=socks5://127.0.0.1:20168
env = http_proxy=socks5://127.0.0.1:20168
env = https_proxy=socks5://127.0.0.1:20168
4.4 安装 Proxychains
使用 Proxychains
从终端启动应用程序的话,可以实现指定端口开启,从而让应用程序走代理。
执行下面的命令:
paru -S proxychains
安装完成后,编辑 /etc/proxychains.conf
,找到最下方的 [ProxyList]
,添加上一步中 v2raya
设置的代理,例如:
[ProxyList]
socks5 127.0.0.1 20168
然后就可以用 proxychains
让有些需要访问网络的程序走代理了喵,试试用下面这个指令打开 Firefox
,看看能否正常使用代理(请确保 v2raya
正常运行):
proxychains firefox
小生最初尝试的其实是
google-chrome-stable
,但是实际上发现google-chrome-stable
的沙盒机制会导致proxychains
无法正常启动google-chrome-stable
,需要执行以下命令:proxychains google-chrome-stable --no-sandbox --disable-zygote
但是小生如此尝试后,
google-chrome-stable
依然无法正常使用代理,目前暂时不清楚具体原因,小生决定先用Firefox
吧(
5. 终端配置(kitty)
hyprland
的默认终端模拟器使用的是 kitty,一款配置简单、界面美观的终端模拟器,详细教程参考官网。
kitty
的配置文件默认为 ~/.config/kitty/kitty.conf
,关于 kitty
的配置都可以写在这个文件里面。
❓
hyprland
下kitty
可能遇到的问题及解决方案如果你编写完你的
kitty.conf
文件后,发现你的终端模拟器界面没有发生任何改变的话,可以参考一下本段内容。打开你的
~/.config/hypr/hyprland/env.conf
文件(或者你自己的hyprland
配置文件),检查其中是否包含如下内容:env = TERMINAL,kitty -1
如果有这一行内容,那么说明你的
hyprland
在启动终端时调用的是kitty -1
而不是单纯的kitty
,也就是说:如果有一个kitty
实例已经在跑,hyprland
在后续启动kitty
的时候,只是在里面开一个新窗口,而不是重新开一个kitty
实例。解决方案:
- 关闭所有
kitty
窗口,然后重新启动即可。pkill kitty kitty
- 或者直接更改
env = TERMINAL,kitty -1
为env = TERMINAL,kitty
,这样的话每次打开终端的逻辑就变成了:创建一个新的kitty
实例。
6. 启动失败问题及解决方案
建议先前往 Hyprland 官方文档查找问题案例
6.1 启动失败(回到登陆界面)
目前 Coldrain 已经遇到过一次 从 SDDM 登陆界面启动 Hyprland 后又回到了 SDDM 登陆界面的赛博鬼打墙(
Coldrain 切换至 tty3 中,试图查找 Hyprland 的运行日志来调查问题的根本原因,但是发现 Hyprland 根本没有生成运行日志,也就是说,Hyprland 还没来得及写日志,就已经崩溃了。
于是,Coldrain 尝试从 tty 中启动 Hyprland,看看是怎么崩溃的:
Hyprland
结果根据报错信息发现是 abseil 版本过新,导致 hyprland 无法找到原本配置文件的位置(人话就是:滚包把 hyprland 滚炸了💦)
Coldrain 接着前往 Hyprland 官方文档的 Q&A 中寻找解决方案,发现官方已经注意到这个问题。那么解决方案就是:把你系统中所有包含 hypr*
的包及依赖这些包的包全部卸载掉,然后重新用 cmake
编译 Hyprland,Coldrain 亲测有效(虽然有点麻烦就是了)。
⚠️ 记得备份好你现有的配置文件
6.2 启动后各种配件消失(但是应用程序和终端可以唤出)
遇到这种情况一般是在你滚包之后,各种配件更新后与 Hyprland 官方的配置不兼容导致
可以先切换到 tty 界面,将当前启动的 Hyprland 关闭:
killall Hyprland
接下来手动启动 Hyprland,并并将输出重定向到一个文件以便查看:
Hyprland > ~/hyprland.log 2>&1
启动后,在终端打开你的 hyprland.log
,看看问题出在哪里。
当然,如果你实在找不到问题,或者实在懒得查问题的话,完全可以把 Hyprland 重新编译安装一遍(
6.3 linuxqq 中无法正常使用 fcitx5 输入法
Hyprland 不依赖传统的 X11 协议,而是使用 Wayland,这意味着应用程序要想在 Hyprland 下运行,必须通过 Wayland 原生支持或 XWayland 兼容层(用于运行老的 X11 应用)
linuxqq
是一个 Electron 应用,Electron 在 Linux 上同时支持两种后端:X11
和 Wayland
。默认情况下,linuxqq
会根据当前环境变量自动选择运行模式,也就是说 linuxqq
在 Hyprland
上默认通过 Wayland
启动,然而 linuxqq
默认未启用 --enable-wayland-ime
,导致 fcitx5 无法检测到输入窗口,最终表现为:在 linuxqq 中无法正常使用 fcitx5 输入法
解决方案如下:
- 在
/usr/bin/linuxqq
中加入如下内容(直接复制粘贴到最后一行即可):
exec /opt/QQ/qq ${QQ_USER_FLAGS[@]} "$@" --ozone-platform-hint=x11 --enable-wayland-ime --wayland-text-input-version=3
参考资料
[1] https://wiki.hypr.land/Getting-Started/Installation/
[2] https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/01setup/
[3] https://blog.manjusaka.de/p/0-0-0-52/#%E5%AE%89%E8%A3%85%E4%BB%A3%E7%90%86%E5%B7%A5%E5%85%B7v2raya
[4] https://github.com/aurora0x27/dotfiles/blob/main/items/linuxqq/src/qq-electron-flags.conf