通用Wayland会话管理器
通用Wayland会话管理器 (uwsm) 运行时会将独立 Wayland混成器变成一组systemd 单元。这提供一个包括环境的稳定的会话管理,并且支持XDG Autostart,与登录会话双向连接,并且可以完全关闭。
loginctl terminate-user ""来将D-Bus守护进程引用的环境分离安装
安装 uwsm包(或者你也可以安装uwsm-gitAUR的Git版本以获取master分支上的最新提交)
配置
服务启动通知和混成器设置的变量
WAYLAND_DISPLAY(和其他有用的环境变量)添加到 systemd 激活的环境中,那么你可以跳过这部分,并且无需使用 uwsm finalize。为了找到当前的混成器,一个Wayland软件作为systemd服务运行需要 WAYLAND_DISPLAY 环境变量(如果它们预期是在Xwayland中运行则是 DISPLAY)。因此,一旦混成器设置了这个和其他有用的环境变量,都应该被放进 systemd/dbus 激活环境中。
uwsm finalize 命令会根据 UWSM_FINALIZE_VARNAMES 列表(使用空白字符 (white-space) 作为分隔符),将 WAYLAND_DISPLAY、DISPLAY 和其他环境变量加入到激活环境。建议在混成器就绪后执行该命令。
如果在激活环境中需要其他由混成器设置的变量,可以将变量名称作为参数传递给 uwsm finalize 或将其放入 UWSM_FINALIZE_VARNAMES 中的使用空白字符分隔的列表中。例如:
exec uwsm finalize VAR1 VAR2 ... export UWSM_FINALIZE_VARNAMES=VAR1 VAR2 ...
环境变量
所有来源于uwsm的环境变量都设置在${XDG_CONFIG_HOME}/uwsm/env并且可用于在这个会话中所有的被管理混成器和图形化软件。
如果你想仅仅为一个指定的混成器(以及对应图形会话中的图形应用程序)设置一些环境变量,那么请将变量放在${XDG_CONFIG_HOME}/uwsm/env-compositor
这个文件的模板如下:
~/.config/uwsm/env
export KEY1=VAR1 export KEY2=VAR2 export KEY3=VAR3 ...
使用
启动
uwsm start中的环境变量被成功使用,那么环境预加载器不再生效POSIX shell配置。uwsm 可以从TTY或者显示管理器启动。
从TTY启动
将如下代码添加进~/.profile:
if uwsm check may-start && uwsm select; then exec uwsm start default fi
如果你想始终启动指定混成器,将上述代码替换为:
if uwsm check may-start; then exec uwsm start compositor.desktop fi
从显示管理器中启动
你可以创建一个自定义桌面项以通过uwsm启动你的混成器:
/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取代了登录shell,那么它会在uwsm start后启动代码或终止用户会话)
技巧提示
软件与自动启动
默认情况下,uwsm 通过在session.slice中的一个自定义systemd服务来启动混成器。很多Wayland混成器允许你在混成器服务中启动其他软件,然而这将会消耗混成器资源,甚至会干扰通知sockets
要将应用程序作为独立的 systemd 范围单元 (scope units) 启动,你可以使用 uwsm app,它既可以启动可执行文件:
uwsm app -- /my/program/path
也可以启动桌面项:
uwsm app -- myprogram.desktop
uwsm 默认会将启动的范围单元放置在 app-graphical.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 的应用守护进程进行通信。 -
app2unit-gitAUR,一个shell脚本。你可以通过设置
APP2UNIT_SLICES环境变量为如下值来让它作为uwsm app的替代方案:APP2UNIT_SLICES='a=app-graphical.slice b=background-graphical.slice s=session-graphical.slice'
- runappAUR,由C++编写,但是少了些许功能。