跳至內容

通用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版本。請耐心等待打包者更新該軟體後再將其升級。

另見

[編輯 | 編輯原始碼]