通用 Wayland 会话管理器
通用 Wayland 会话管理器 (uwsm) 可以动态地将独立的 Wayland compositor 包装成一套 systemd unit。这提供了强大的会话管理功能,包括环境变量、XDG Autostart 支持、与登录会话的双向绑定以及干净的关机。
loginctl terminate-user ""。安装
配置
服务启动通知和 compositor 设置的变量
WAYLAND_DISPLAY(和其他有用的环境变量)设置到 systemd 激活环境中,那么您可以跳过本节,并且不需要使用 uwsm finalize。为了找到当前的 compositor,作为 systemd 服务运行的 Wayland 应用程序需要 WAYLAND_DISPLAY 环境变量(或者如果是通过 Xwayland 运行,则为 DISPLAY)。因此,一旦 compositor 设置了它们的值,这些以及其他有用的环境变量就应该被放入 systemd/dbus 激活环境中。
uwsm finalize 命令会将 WAYLAND_DISPLAY、DISPLAY 以及通过空格分隔的 UWSM_FINALIZE_VARNAMES 列表中列出的其他环境变量放入激活环境中。建议在 compositor 就绪后执行此命令。
如果 compositor 设置的其他变量需要在激活环境中使用,它们可以作为参数传递给 uwsm finalize,或者放入 UWSM_FINALIZE_VARNAMES 的空格分隔列表中。请参阅下面的示例
exec uwsm finalize VAR1 VAR2 ... export UWSM_FINALIZE_VARNAMES=VAR1 VAR2 ...
环境变量
在 ${XDG_CONFIG_HOME}/uwsm/env 中设置的所有环境变量都将被 *uwsm* sourced,并且可供该会话中运行的所有托管 compositor 和图形应用程序使用。
如果您需要某些环境变量仅为特定的 *compositor*(以及该图形会话中的图形应用程序)设置,请将它们放入 ${XDG_CONFIG_HOME}/uwsm/env-compositor 中。
下面可以看到一个此类文件的示例
~/.config/uwsm/env
export KEY1=VAR1 export KEY2=VAR2 export KEY3=VAR3 ...
用法
启动
uwsm start 上下文中使用的环境成功使用。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,则终止用户会话)。
技巧与提示
应用程序和自动启动
默认情况下,uwsm 通过 session.slice 中的自定义 systemd 服务启动 compositors。许多 Wayland compositors 允许您启动其他应用程序,这些应用程序随后将在 compositor 服务中启动,这将无用地消耗 compositor 资源,甚至干扰通知套接字。
要将应用程序作为单独的 systemd scope unit 启动,您可以使用 uwsm app,它可以启动可执行文件
uwsm app -- /my/program/path
和 桌面条目
uwsm app -- myprogram.desktop
默认情况下,uwsm 将启动的 scope unit 放在 app-graphical.slice slice 中。如果您想将它们放在 background-graphical.slice 或 session-graphical.slice 中,则应分别使用选项 -s b、-s s
uwsm app -s b -- background-app.desktop
替代方案
您可以使用一个更快的替代方案,而不是 uwsm app(它是一个 Python 脚本)
- uwsm 的
uwsm-app脚本,它与 uwsm 的 app daemon 通信。 - app2unit-gitAUR,它是一个 shell 脚本。您可以通过设置
APP2UNIT_SLICES环境变量如下来将其用作uwsm app的即插即用替换APP2UNIT_SLICES='a=app-graphical.slice b=background-graphical.slice s=session-graphical.slice'
- runappAUR,它是用 C++ 编写的,但缺少一些功能。