通用Wayland會話管理器 - Arch Linux 中文维基

跳至內容

# 通用Wayland會話管理器

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Universal Wayland Session Manager，最近一次同步於 2025-10-02，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

通用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_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++編寫，但是少了些許功能。

## 另見

- uwsm(1)

分類：​

- Wayland

通用Wayland會話管理器
新增話題