跳转到内容

通用Wayland会话管理器

来自 Arch Linux 中文维基

通用Wayland会话管理器 (uwsm) 运行时会将独立 Wayland合成器变成一组systemd 单元。这提供一个包括环境的稳定的会话管理,并且支持XDG Autostart,与登录会话双向连接,并且可以完全关闭。

注意:高度建议使用dbus-broker作为D-Bus守护进程的实现。除了有其他好处,它重复使用systemd激活环境,而不是启动一个独立的环境。这个简化的环境管理可以有正确的清理。也支持reference implementation,但是不允许取消设置一个变量,所以更高效的清理是将其设置为空字符。唯一可能的清理办法是使用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会将WAYLAND_DISPLAYDISPLAY和其他环境变量列出加入到激活环境,并通过空格与UWSM_FINALIZE_VARNAMES列表分开。建议在合成器就绪后执行该命令。

如果合成器在激活环境中设置其他它需要的变量,也可以通过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

如果你也想启动一个相同的合成器,那么你可以使用在~/.profile添加如下代码代替:

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后启动代码或终止用户会话)

注意:请不要使用合成器的原生退出机制或者直接地杀死进程。这将会从所有客户端下复制一个合成器并且会干扰有序的单元未激活顺序 Do not use a compositor's native exit mechanism or kill its process directly. This will yank the compositor from under all the clients and interfere with ordered unit deactivation sequence.

技巧提示

[编辑 | 编辑源代码]

软件与自动启动

[编辑 | 编辑源代码]

uwsm 默认通过在session.slice中的一个自定义systemd服务来运行合成器。很多Wayland合成器允许你在合成器服务中启动其他软件,然而这将会消耗合成器资源,甚至干扰通知sockets

你可以通过uwsm app来以独立的systemd范围单元启动应用程序

uwsm app -- /my/program/path

桌面项

uwsm app -- myprogram.desktop

uwsm默认会将其运行范围设置在app-graphical.slice。如果你想要将它们放置在background-graphical.slicesession-graphical.slice,那么你分别可以使用-s b-s s

uwsm app -s b -- background-app.desktop

替代

[编辑 | 编辑源代码]

你可以使用app2unit-gitAUR来代替uwsm app(运行一个Python脚本),app2unit-gitAUR应该是更快的,因为它是一个shell脚本。你可以通过设置APP2UNIT_SLICES环境变量为如下值来让它作为uwsm app的替代方案:

APP2UNIT_SLICES='a=app-graphical.slice b=background-graphical.slice s=session-graphical.slice'

runappAUR也是一个快速的替代品,它是由C++编写的,但是少了些许功能

故障排除

[编辑 | 编辑源代码]

打开某桌面环境时提示Trying to remove unit with unsupported extension conf

[编辑 | 编辑源代码]
注意:目前的版本(0.23.2)已解决该问题

当前版本(0.23.1)由于作者错误的代码提交,导致出现该报错[1],若想正常使用,请降级该软件至0.23.0版本。或手动编译安装GitHub仓库0.23.2版本。目前uwsmuwsmAUR都是0.23.1版本。请耐心等待打包者更新该软件后再将其升级。

另见

[编辑 | 编辑源代码]