通用 Wayland 会话管理器

出自 ArchWiki
(重定向自 Uwsm

Universal Wayland Session Manager (uwsm) 动态地将独立的 Wayland 合成器 封装成一组 systemd 单元。这提供了强大的会话管理,包括环境、XDG Autostart 支持、与登录会话的双向绑定以及干净的关闭。

注意: 强烈建议使用 dbus-broker 作为 D-Bus 守护进程的实现。 除其他优点外,它还重用 systemd 激活环境,而不是拥有单独的环境。 这简化了环境管理并允许正确的清理。 也支持 参考实现,但它不允许取消设置变量,因此通过将它们设置为空字符串来执行尽力而为的清理。 正确清理参考 D-Bus 守护进程的单独环境的唯一方法是运行 loginctl terminate-user ""

安装

安装 uwsm 软件包。

配置

服务启动通知和 compositor 设置的变量

注意: 如果受管理的 compositor 已经在 systemd 激活环境中设置了 WAYLAND_DISPLAY(和其他有用的环境变量),那么您可以跳过此部分,并且不需要使用 uwsm finalize

为了找到当前的 compositor,wayland 应用程序需要 WAYLAND_DISPLAY(或 DISPLAY 变量,如果它们旨在通过 Xwayland 运行)。 因此,一旦 compositor 设置了它们的值,就应将此变量和其他有用的环境变量放入 systemd/dbus 激活环境中。

命令 uwsm finalizeWAYLAND_DISPLAYDISPLAY 和其他通过空格分隔的 UWSM_FINALIZE_VARNAMES 列表列出的环境变量放入激活环境中。 因此,您需要在 compositor 准备就绪后执行此命令。

如果您的激活环境中需要 compositor 设置的其他变量,那么您也可以将它们作为参数传递

exec uwsm finalize VAR1 VAR2 ...

环境变量

${XDG_CONFIG_HOME}/uwsm/env 文件中设置的所有环境变量都由 uwsm 获取,并且可用于所有受管理的 compositor 以及在此类会话中运行的图形应用程序。

如果您需要仅为特定的compositor(以及该图形会话中的图形应用程序)设置某些环境变量,请将它们放在 ${XDG_CONFIG_HOME}/uwsm/env-compositor 中。

所有这些文件都应使用以下格式设置环境变量

export KEY1=VAR1
export KEY2=VAR2
export KEY3=VAR3
...

并且不应包含注释。

用法

启动

uwsm 可以通过 TTY 和 显示管理器 启动。

TTY

在您的 ~/.profile 文件中添加

if uwsm check may-start && uwsm select; then
  exec uwsm start default
fi

如果您想始终启动相同的 compositor,那么您可以在 ~/.profile 文件中使用

if uwsm check may-start; then
  exec uwsm start compositor.desktop
fi

显示管理器

您可以创建一个自定义会话桌面条目,通过 uwsm 启动您的 compositor

/usr/share/wayland-sessions/my-compositor-uwsm.desktop
[Desktop Entry]
Name=My compositor (with UWSM)
Comment=My cool compositor, UWSM session

# either full command line with metadata and executable
Exec=uwsm start -N "My compositor" -D mycompositor:mylib -C "My cool compositor" -- my-compositor

# or a reference to another entry
Exec=uwsm start -- my-compositor.desktop

DesktopNames=mycompositor;mylib
Type=Application

会话终止

如果您想终止当前的 uwsm 会话,那么您应该使用 loginctl terminate-user ""(终止整个用户会话)或 uwsm stop(在 uwsm start 之后执行代码或终止用户会话,如果它替换了 登录 shell)。

警告: 请勿使用 compositor 的原生退出机制或直接杀死其进程。 这会将 compositor 从所有客户端下方撤出,并干扰有序的单元停用序列。