跳至內容

通用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 命令會根據 UWSM_FINALIZE_VARNAMES 列表(使用空白字符 (white-space) 作為分隔符),將 WAYLAND_DISPLAYDISPLAY 和其他環境變量加入到激活環境。建議在混成器就緒後執行該命令。

如果在激活環境中需要其他由混成器設置的變量,可以將變量名稱作為參數傳遞給 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.slicesession-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++編寫,但是少了些許功能。

另見