在Gentoo环境安装和使用Sway

Sway有一些 USE flags 可以微调:

  • 通过以下命令检查当前系统的USE flag:

检查当前系统的USE flag
emerge --info | grep ^USE
  • 修订 /etc/portage/make.conf 添加以下USE flag作为全局配置:

全局USE配置
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"

# If left undefined, Portage's default behavior is to set the MAKEOPTS value to the same number of threads returned by `nproc` 
MAKEOPTS="-j8"

# NOTE: This stage was built with the bindist Use flag enabled

# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C

GENTOO_MIRRORS="http://mirrors.aliyun.com/gentoo http://distfiles.gentoo.org"
ACCEPT_LICENSE="-* @FREE @BINARY-REDISTRIBUTABLE"

USE="wayland man -gnome -kde -fortran"
  • 添加 /etc/portage/package.use/sway 内容是针对单个应用的独立配置:

/etc/portage/package.use/sway 配置独立参数
# 当sway启用wallpapers时需要安装swaybg,此时需要启用 gdk-pixbuf 来支持PNG之外的图片类型
gui-apps/swaybg gdk-pixbuf
gui-wm/sway swaybar swaynag wallpapers

# seatd 用于设置sway环境
sys-auth/seatd server

# foot终端支持cjk多字节语言(中文,日文,韩文)
dev-libs/libutf8proc cjk

我发现实际上不配置 /etc/portage/package.use/sway 也行,也是默认启用了 man swaybar swaynag

  • 安装 sway :

安装sway
emerge --ask gui-wm/sway

这里有一个提示:

安装sway提示
The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by gui-wm/sway-1.8.1::gentoo[wallpapers]
# required by gui-wm/sway (argument)
>=gui-apps/swaybg-1.2.0 gdk-pixbuf
# required by media-libs/mesa-23.1.6::gentoo
# required by gui-libs/wlroots-0.16.2-r1::gentoo
# required by gui-wm/sway-1.8.1::gentoo
# required by gui-wm/sway (argument)
>=media-libs/libglvnd-1.6.0 X

这个提示中 sway 的 wallpapers USE flag会触发:

wallpapers 的USE Flag会触发 swaybg 安装
The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by gui-wm/sway-1.8.1::gentoo[wallpapers]
# required by gui-wm/sway (argument)
>=gui-apps/swaybg-1.2.0 gdk-pixbuf
# required by media-libs/mesa-23.1.6::gentoo
# required by gui-libs/wlroots-0.16.2-r1::gentoo
# required by gui-wm/sway-1.8.1::gentoo
# required by gui-wm/sway (argument)
>=media-libs/libglvnd-1.6.0 X

如果USE flags 没有使用 -mesa 就会触发以下:

mesa 的USE Flag会触发 libglvnd 安装
The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by gui-wm/sway-1.8.1::gentoo[wallpapers]
# required by gui-wm/sway (argument)
>=gui-apps/swaybg-1.2.0 gdk-pixbuf
# required by media-libs/mesa-23.1.6::gentoo
# required by gui-libs/wlroots-0.16.2-r1::gentoo
# required by gui-wm/sway-1.8.1::gentoo
# required by gui-wm/sway (argument)
>=media-libs/libglvnd-1.6.0 X

配置

  • 先将全局配置复制到个人目录下:

复制sway个人配置
mkdir -p ~/.config/sway
cp /etc/sway/config ~/.config/sway/
  • 启动:

直接运行 sway
sway

报错处理

这里我遇到一个报错:

直接运行 sway 报错
XDG_RUNTIME_DIR is not set in the environment. Aborting

这是因为:

  • 没有安装和配置 seatd

  • 没有设置好用户的环境变量 XDG_RUNTIME_DIR (也就是每个用户需要有独立分离的运行时目录)

解决方法:

  • 安装 sys-auth/seatd 并且配置用户 huatai 到对应组,以及启动服务:

安装和配置 seatd
emerge --ask sys-auth/seatd

# 针对OpenRC配置
gpasswd -a huatai video
gpasswd -a huatai seat
rc-update add seatd default
rc-service seatd start
  • 然后为用户 huatai 配置 ~/.bashrc 添加如下内容设置用户环境变量:

配置用户环境变量 ~/.bashrc
export XDG_RUNTIME_DIR="/tmp/user/"`id -u`
if [ ! -d $XDG_RUNTIME_DIR ]; then
    mkdir -p $XDG_RUNTIME_DIR
    chmod 0700 $XDG_RUNTIME_DIR
fi
  • 补充安装 foot (因为默认配置中使用了 foot 作为终端):

安装foot终端软件
emerge --ask gui-apps/foot

备注

我发现在安装 foot 的依赖包 dev-libs/libutf8proc 提供了一个 USE flag cjk 是用来支持Multi-byte character languages (Chinese, Japanese, Korean)

现在就能正常启动 sway 了,不过此时还不能充分发挥高分辨率屏幕特性,待继续优化…

高分辨率

  • swaymsg 可检查系统硬件,其中检查显示屏如下:

检查当前连接显示器
swaymsg -t get_outputs

例如我的笔记本显示:

检查当前连接显示器输出案例(苹果笔记本内置显示器)
Output eDP-1 'Apple Computer Inc Color LCD Unknown' (focused)
  Current mode: 2880x1800 @ 59.990 Hz
  Position: 0,0
  Scale factor: 2.000000
  Scale filter: nearest
  Subpixel hinting: unknown
  Transform: normal
  Workspace: 1
  Max render time: off
  Adaptive sync: disabled
  Available modes:
    2880x1800 @ 59.990 Hz
    1920x1200 @ 59.955 Hz
    1920x1080 @ 60.000 Hz
    1600x1200 @ 59.955 Hz
    1680x1050 @ 59.998 Hz
    1400x1050 @ 59.998 Hz
    1280x1024 @ 59.950 Hz
    1280x960 @ 59.995 Hz
    1152x864 @ 59.972 Hz
    1024x768 @ 59.949 Hz
    800x600 @ 59.960 Hz
  • ~/.config/sway/config 可以添加多个显示器配置,例如以下是3个并排显示器配置,且第三个显示器垂直旋转:

配置3个显示器的案例
# 配置左方的显示器,且物理规格稍微比主显示器大一些
output DP-1 resolution 3440x1440@165hz pos 2560 350

# 主显示器居中
output DP-2 resolution 2560x1440@74.971hz pos 0 250

# 可选显示器是垂直的
output DP-3 resolution 1920x1080@60hz pos 6000 0 transform 270

终端模拟器

默认终端模拟器是 foot ,一个非常轻量级的终端, 但是可能对中文支持不好 (我这次实践开启了 cjk Gentoo Linux USE Flags 发现中文显示很好)

Gentoo的wiki中推荐 x11-terms/alacritty 是原生Wayland程序,而且使用 Rust Atlas 编写,性能卓越。

应用程序加载器

默认的应用程序加载器是 dmenu 但是这个程序依赖X,所以推荐使用 dev-libs/bemenu (原生Wayland)替代

参考