Sway(縮寫自 SirCmpwn's Wayland compositor[1])是一款專為 Wayland 設計的合成器,旨在與 i3 完全兼容。根據官網所述:
- Sway 是 Wayland 的合成器,也是 x11 的 i3 窗口管理器的替代品。它可以根據您現有的 i3 配置工作,並支持 i3 的大部分特性以及一些附加功能
若您喜歡視覺效果,也可以試試 swayfxAUR,這是一個帶有視覺效果的 Sway 分支。
安裝
安裝 sway包,也可以安裝開發版本 sway-gitAUR。由於依賴關係緊密,建議在更新 sway 時始終更新 wlroots。
--unsupported-gpu
參數。您還可以安裝 swaylock包、 swayidle包 和 swaybg包,用以鎖定屏幕、設定空閒管理和設置壁紙。此外,AUR 提供這些軟體包的開發版本,分別為 swaylock-gitAUR、swayidle-gitAUR 和 swaybg-gitAUR,這些軟體包提供了各自 Git 倉庫的最新功能和更新。
默認的應用程式啟動器為 wmenu包,默認的終端模擬器是 foot。在啟動 sway 之前,建議安裝它們或在配置文件中設置新的啟動器和終端。您可在 Sway wiki 的遷移指南上找到一些 i3 實用程序的其他 Wayland 兼容版本。
啟動
Sway 在啟動之前需要訪問您的硬體設備,如鍵盤、滑鼠和顯卡。這些硬體設備的集合稱為一個 seat,如同 sd-login(3) 所述。
在 Arch Linux 上,Sway 可以使用以下任一方式訪問您的 seat。
- systemd-logind(8) 和 polkit包
- seatd包,會作為 wlroots包的依賴與 Sway 一起安裝
若 polkit
已安裝在您的系統上, Sway 應會自動訪問你的 seat。
若 polkit
未安裝在您的系統上,並且您想使用 seatd
來替代,請將您添加到 seat
用戶組並啟用/啟動 seatd.service
,重新登錄並選擇以下方法之一來啟動 Sway。
手動登錄
要啟動 Sway,只需在 Linux 終端執行 sway
。
自動登錄
與 X 類似,可以通過將以下內容添加到 shell 初始化文件來啟動 Sway(請參閱命令行解釋器#登錄 Shell):
if [ -z "$WAYLAND_DISPLAY" ] && [ -n "$XDG_VTNR" ] && [ "$XDG_VTNR" -eq 1 ] ; then exec sway fi
有關更多詳細信息,請參閱 Xinit#登錄時自動啟動 X。
選擇顯示管理器
Sway 會話位於 /usr/share/wayland-sessions/sway.desktop
。 它可以被 GDM 和 SDDM 等現代顯示管理器自動識別。
也可以將 systemd 用戶服務作為一個顯示管理器去運行 sway。
您還可以使用基於文本的顯示管理器,請參閱顯示管理器#控制台。
配置
若您已在使用 i3,則可以將 i3 配置文件複製到 ~/.config/sway/config
,該文件開箱即用。否則,請將位於 /etc/sway/config
的示例配置文件複製到 ~/.config/sway/config
。有關配置的信息參見 sway(5)。
include /etc/sway/config.d/*
一行,以便從插入(drop-in)文件中讀取並應用配置。sway包 提供了一個插入文件 50-systemd-user.conf
,其會將多個環境變量導入 systemd 用戶會話和 dbus。一些應用需要這些環境變量以正常運行(如xdg-desktop-portal-wlr包)。鍵盤布局
默認情況下,sway 從 US QWERTY 鍵盤布局開始。配置多個鍵盤布局:
~/.config/sway/config
input * { xkb_layout "us,de,ru" xkb_variant "colemak,,typewriter" xkb_options "grp:win_space_toggle" } input <identifier> xkb_model "pc101"
更多細節請參閱 xkeyboard-config(7) 與 sway-input(5)。
在啟動 sway
時,也可以使用環境變量(XKB_DEFAULT_LAYOUT
、XKB_DEFAULT_VARIANT
等)配置鍵盤布局。配置選項優先於環境變量。
打字延遲和速率
要更改打字延遲和速率,您可以在 input
節添加以下行:
~/.config/sway/config
input <identifier> repeat_delay 300 input <identifier> repeat_rate 30
狀態欄
Sway 附帶了一個默認狀態欄,名為 swaybar ,可在純 Wayland 環境中運行。swaybar 可以調用 shell 腳本或其他程序來在狀態欄中顯示信息。有關詳細信息,請參閱 sway-bar(5) 與 swaybar-protocol(7)。
i3status 是在 Wayland 下獲取實用的默認狀態欄的一個選項,您只需在 sway 配置的末尾添加以下代碼段:
~/.config/sway/config
bar { status_command i3status }
欲為 i3status 啟用色彩輸出,請在 i3status 配置中調整以下部分:
~/.config/i3status/config
general { colors = true interval = 5 }
Output
sway
的 output
命令可以為不同的顯示輸出指定詳細配置,包括但不限於壁紙、縮放、位置等。如有需要,您可將不同的 output 命令整合到一行,例如:
~/.config/sway/config
output HDMI-A-1 mode 1920x1080 pos 1920 0 bg ~/wallpaper.png stretch
output 有多種方式匹配顯示輸出。可以使用其指定的輸出名稱,也可以使用 "*"
匹配所有顯示輸出,或是使用顯示器的不同名稱(由品牌、型號和序列號組成的字符串),例如:
~/.config/sway/config
output "Some Company ABC123 0x00000000" pos 1920 0
可以使用以下命令獲取輸出名稱和一些其他信息:
$ swaymsg -t get_outputs
要深入了解配置和附加選項,請參閱 sway-output(5)。
壁紙
sway 用專用程序處理壁紙,最簡單的例子是 swaybg包,其可直接由 sway
管理。若要運行 output ... bg
命令,請安裝 swaybg包。
可以將以下行附加在 sway 配置的任意位置,其會在在所有顯示器上設置背景圖像:
~/.config/sway/config
output "*" bg /path/to/image fill
當然,/path/to/image
應當被替換為存在的圖像路徑。
如果只需要純色背景,可以按如下方式設置:
output * bg #000000 solid_color
請參閱 Sway wiki 以了解更多用於管理壁紙的工具。
HiDPI
自動設定
Sway 默認使用整數倍縮放。若滿足以下條件[3]:
- 屏幕通過 EDID( Extended Display Identification Data,外部顯示設備標識數據)提供有效的物理顯示信息。
- DPI(每英寸像素數)至少為 192。
- 屏幕解析度的高至少為 1200 像素。
那麼 Sway 會使用 2 倍縮放。一些設備(如 Framework Laptop 16)的 DPI 近似(但不是)192,在這種情況下,您可能需要手動配置分數倍縮放。
手動設定
在配置文件裡用 output
命令設置縮放倍數。可以設置分數倍縮放,不過 HiDPI 屏幕通常為 2。
~/.config/sway/config
output <名稱> scale <倍數>
可以使用以下命令獲知顯示器名稱:
$ swaymsg -t get_outputs
輸入設備
可以調整特定輸入設備的配置。例如,若要為所有觸摸板啟用點擊以單擊和自然滾動,請使用以下配置:
~/.config/sway/config
input type:touchpad { tap enabled natural_scroll enabled }
要為特定觸摸板設定配置,請使用 swaymsg -t get_inputs
獲取設備標識符並用其代替 type:touchpad
。
swaymsg -t get_inputs
的輸出可能包含「\」來轉義「/」等符號(例如 "2:14:ETPS\/2_Elantech_Touchpad"
),需要刪除。更多文檔和選項,如加速度或完全禁用輸入,請參閱 sway-input(5)。
若您使用數位板,請參閱 Graphics tablet#Sway。
觸控螢幕映射
在多顯示器環境中,觸控螢幕的觸摸輸入目標可以僅被映射到該觸控螢幕。
~/.config/sway/config
set $display1 "Dell Inc. DELL P2414H VHVTW542165L" set $display2 "Dell Inc. DELL P2418HT MYDM775F152L" set $display2-touch "8146:24835:Melfas_LGD_AIT_Touch_Controller" input $display2-touch map_to_output $display2
自定義快捷鍵
鍵盤上的特殊按鍵可用於執行命令,例如控制音量、屏幕亮度或媒體播放:
~/.config/sway/config
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle bindsym XF86MonBrightnessDown exec brightnessctl set 5%- bindsym XF86MonBrightnessUp exec brightnessctl set 5%+ bindsym XF86AudioPlay exec playerctl play-pause bindsym XF86AudioPause exec playerctl play-pause bindsym XF86AudioNext exec playerctl next bindsym XF86AudioPrev exec playerctl previous bindsym XF86AudioStop exec playerctl stop bindsym XF86Search exec bemenu-run
有關詳細信息和替代實用程序,請參閱:
- PulseAudio#鍵盤音量控制
- WirePlumber#Keyboard volume control
- Advanced Linux Sound Architecture#鍵盤控制音量
- 背光#背光實用程序
- MPRIS。
要允許在鎖屏時執行快捷鍵,請將 --locked
參數添加到 bindsym。
bindsym --locked XF86AudioPlay exec playerctl play-pause
圖形指示條
在調整某些百分比值設置(如亮度或音量)時,可以顯示一個圖形指示條。在 Sway 中提供此工具的一個不錯的選擇是 wob包(或 wob-gitAUR),其提供了流行的 X 工具 xobAUR 的部分功能,但是是 Wayland 上 layer-shell 協議的實現。有關使用示例,請參閱項目網站。
工作區概覽
如果您在工作區開啟了很多窗口,導致難以分辨,那麼 sovAUR 可以派上用場。它是一個疊加層,可以顯示所有工作區的概覽,使 sway 導航更容易。其可以顯示程序名稱、窗口標題,支持多 output 配置。關於詳細信息,請參閱項目網站。
空閒管理
Sway 有一個名為 swayidle包 的專用空閒管理守護程序來處理空閒會話。可以用不同的方法來啟動和參數化守護程序。最簡單的方法是使用 sway 本身的配置。swayidle
接受大量參數來配置 timeout
(超時,又名「空閒」)、resume
(恢復,超時後不再空閒)、before-sleep
(睡眠前)等事件,請參閱 swayidle(1) 了解更多細節和事件的進一步解釋。然後,可以為每個事件分配一個操作。要為一個事件分配多個操作,只需重複觸發器即可。
以下配置可使 swayidle
在 30 分鐘後鎖定屏幕,並在 5 秒後將其關閉:
~/.config/sway/config
exec swayidle -w \ timeout 1800 'swaylock -f' \ timeout 1805 'swaymsg "output * power off"' \ resume 'swaymsg "output * power on"'
要更快地關閉鎖定屏幕,例如在10秒後,請為鎖定管理器設置進程列表,並相應地執行 swaymsg "output * power off"
,如下:
timeout 10 'if pgrep -x swaylock; then swaymsg "output * power off"; fi' resume 'if pgrep -x swaylock; then swaymsg "output * power on"; fi'
要在屏幕鎖定前掛起和暫停播放媒體,請將以下配置添加到 swayidle 命令:
before-sleep 'playerctl pause;swaylock'
若您不希望在 Firefox、Chrome 或 VLC 播放視頻時觸發 swaylock,您可以用 idlehack-gitAUR 監聽 dbus 的 screensaver inhibit(阻止屏保)請求,並調用 swayidle-inhibit。Firefox、Chrome 和 VLC 等程序會發出該事件以阻止系統空閒。
懸浮窗口和窗口分配
要啟用懸浮窗口或窗口分配,請打開應用程式,然後使用 app_id
、class
、instance
和 title
屬性來啟用懸浮窗口/窗口分配。以下命令可以列出所有打開的窗口的屬性:
$ swaymsg -t get_tree
欲獲取所有打開的窗口的 app_id
,請執行:
$ swaymsg -t get_tree | grep "app_id"
僅獲取當前選中窗口的 app_id
,請執行:
$ swaymsg -t get_tree | jq -r '..|try select(.focused == true)'
X11 窗口沒有 app_id
屬性,要匹配它們,您可以使用 class
、window_type
、window_role
和/或 instance
等屬性。請在 swaymsg -t get_tree
命令的輸出中查找相關屬性並為窗口創建足夠詳細的規則。
~/.config/sway/config
for_window [app_id="galculator"] floating enable for_window [window_type="dialog"] floating enable for_window [window_role="dialog"] floating enable assign [class="firefox"] -> 3 assign [class="^Urxvt$" instance="^htop$"] -> 9
這類似於在X11中使用 xorg-xprop包 查找 class
或 wm_name
屬性。
使用多個顯示器時,懸浮的 scratchpad(暫存器)窗口可能會變得很大,覆蓋多個顯示器。可以使用以下命令將懸浮窗口居中並調整為當前顯示器大小的 80%:
$ swaymsg move position center; swaymsg resize set 80ppt 80ppt
剪貼板
默認情況下,每當窗口關閉時,剪貼板都會被清空。此設計可能不符合部分用戶預期。
只有安裝了剪貼板管理器,剪貼板的內容才能在窗口之間共享。
舉一個針對 Wayland 設計的剪貼板管理器 clipman,它可以通過 clipmanAUR 或 clipman-gitAUR 進行安裝。
如果要在 Sway 中使用 clipman, 請將以下行添加到配置文件中:
~/.config/sway/config
exec wl-paste -t text --watch clipman store --no-persist
Xresources
在 Sway 中使用 ~/.Xresources
需要把它拷貝到~/.Xdefaults
。
Xwayland
請參閱 Wayland#Xwayland 以了解詳細信息和可用軟體包的概述。
默認情況下 Xwayland 處於啟用狀態。
欲完全禁用 Xwayland 並運行「純」Wayland 會話,請使用以下配置以禁用 Xwayland:
~/.config/sway/config
xwayland disable
若您想一眼知曉哪些窗口使用 Xwayland,可以使用以下配置:
~/.config/sway/config
for_window [shell="xwayland"] title_format "[XWayland] %title"
使用另一個 wlroots 渲染器
要使用另一個渲染器如 vulkan,請參閱 Wayland#在基於 wlroots 的混成器上使用另一個渲染器。
程序自啟動
參見 i3#自啟動程序章節,並將配置文件名調整為適用於 Sway 的版本。
提示和技巧
啟動時啟用 CapsLock/NumLock
默認情況下,sway 會在啟動時禁用 CapsLock
和 NumLock
。欲在啟動時啟用它們,請將鍵盤的 xkb_capslock
和/或 xkb_numlock
輸入配置設置為 enable
。例如,若要在所有鍵盤上執行此操作,請將以下行添加到 sway 配置:
~/.config/sway/config
input type:keyboard xkb_capslock enabled input type:keyboard xkb_numlock enabled
在任何情況下,都可以通過按鍵盤上的相關鍵來切換 CapsLock
和 NumLock
狀態。
當前鍵盤布局
可以按如下方式檢索當前鍵盤布局,其中 kbd_identifier
需要替換為鍵盤的標識符:
$ swaymsg -t get_inputs | jq -r '.[] | select(.identifier == "kbd_identifier") | .xkb_active_layout_name'
組合鍵
組合鍵(compose key)和其它按鍵結合使用可用於輸入鍵盤不支持的字符。例如將 PrintScreen
設為組合鍵:
$ swaymsg 'input * xkb_options compose:prsc'
可在 Xorg/Keyboard configuration#Configuring compose key 查看可用的組合。組合也可以在 XCompose 文件中配置,需要重新啟動應用程式才能使更改生效。
背光切換
若要使用某按鍵(如 Pause
)關閉(和打開)顯示器,請在 Swayconfig
中綁定以下腳本:
#!/bin/sh read lcd < /tmp/lcd if [ "$lcd" -eq "0" ]; then swaymsg "output * power on" echo 1 > /tmp/lcd else swaymsg "output * power off" echo 0 > /tmp/lcd fi
也可以直接使用 toggle 選項,只是使用多顯示器時需要明確指定 output:
$ swaymsg "output output_name power toggle"
屏幕捕獲和屏幕共享
請查看屏幕捕獲#Wayland.
色溫調節
請查看背光#Wayland.
色彩管理
可以將以下行添加到 Sway 配置以使用色彩管理配置文件:
~/.config/sway/config
output * 色彩管理配置文件 icc /path/to/your/color_profile.icc
用鍵盤控制 swaynag
Swaynag 是 sway 附帶的默認警告/提示程序,僅支持用戶用滑鼠與之交互。諸如 swaynagmodeAUR 之類的幫助程序可通過鍵盤快捷鍵啟用交互。
Swaynagmode 的工作原理是首先啟動 swaynag,然後偵聽觸發操作的信號,例如選擇下一步按鈕、關閉提示或接受所選按鈕。這些信號會被另外的帶有控制參數的 swaynagmode 腳本實例(如 swaynagmode --select right
和 swaynagmode --confirm
)發送。
默認情況下,Swaynagmode 在初始化時觸發 sway 的 nag
模式,在退出時返回 default
。這樣,您就可以在 sway 配置中輕鬆定義快捷鍵:
~/.config/sway/config
set $nag exec swaynagmode mode "nag" { bindsym { Ctrl+d mode "default" Ctrl+c $nag --exit q $nag --exit Escape $nag --exit Return $nag --confirm Tab $nag --select prev Shift+Tab $nag --select next Left $nag --select next Right $nag --select prev Up $nag --select next Down $nag --select prev } }
您可將 sway 配置為通過配置命令 swaynag_command swaynagmode
使用 swaynagmode。
更改光標主題和大小
要設置光標主題和大小,請使用以下配置:
~/.config/sway/config
seat seat0 xcursor_theme 光標主題 光標大小
其中光標主題
可以設置或替換為特定名稱(如 default
、Adwaita
或 Simple-and-Soft
),以及光標大小
值如 48
。
要查看二者的值,可以使用 echo $XCURSOR_SIZE
和 echo $XCURSOR_THEME
。
更改配置後需要重啟以使更改生效。
$XCURSOR_SIZE
和 $XCURSOR_THEME
的值。使用 systemd 管理僅用於 Sway 的守護程序
Systemd 提供了一個 graphical-session.target
用戶單元,其會在任何圖形會話(無論是 Xorg 還是 Wayland)正在運行時活動。可以將應該在所有圖形環境中運行的用戶服務綁定到該目標,其還允許將特定於某窗口管理器的目標綁定到 graphical-session.target
以啟動和停止僅在該窗口管理器下運行的服務。請參閱 systemd.special(7)。
用戶可能希望僅為 Sway 啟動某些服務/守護程序(如 swayidle包 或 kanshi包),並且可能還希望這些服務在 Sway 停止時停止。此外,使用 systemd-oomd.service(8) 的用戶可能希望將服務放在單獨的 cgroup 中,以便單個內存密集型服務不會關閉整個 Sway 會話(請參閱 Fedora bug 報告)。
此功能的部分或全部由 Arch 的 Sway 軟體包提供。例如,sway包 和 sway-gitAUR 都提供一個 50-systemd-user.conf
插入文件(見#配置)。
如果您打算使用下面介紹的自己手搓的方法或使用專門的軟體包(如sway-systemd-gitAUR、sway-services-gitAUR 或 uwsm包)來實現此功能,則應考慮刪除提供相同功能的文件。
要自己手搓該功能,可以創建一個 sway-session.target
,讓該目標啟動需要的守護進程/服務。此 systemd 目標應當是用戶目標(請參見 systemd/用戶)。 例如:
~/.config/systemd/user/sway-session.target
[Unit] Description=Sway compositor session Documentation=man:systemd.special BindsTo=graphical-session.target Wants=graphical-session-pre.target After=graphical-session-pre.target
然後,將以下行添加到 Sway 的配置文件中(例如,將該行追加到 ~/.config/sway/config
或將新文件添加到 /etc/sway/config.d/
):
~/.config/sway/config
... ... ... exec_always systemctl --user start sway-session.target
如此,每當 Sway 啟動時也會運行 sway-session.target
。
最後,將所需的服務連結到 sway-session.target
。例如,添加 kanshi包(或 kanshi-gitAUR)服務(見 kanshi#Manage kanshi with systemd):
~/.config/systemd/user/kanshi.service
[Unit] Description=Dynamic output configuration for Wayland compositors Documentation=https://sr.ht/~emersion/kanshi BindsTo=sway-session.target [Service] Type=simple ExecStart=/usr/bin/kanshi [Install] WantedBy=sway-session.target
當該用戶單元處於啟用時,它僅在 Sway 運行時激活,並在 Sway 關閉時停用。
sway-session.target
文件的創建和環境的導入也可以通過 sway-systemd-gitAUR 來完成。除了將服務分離到 cgroup 中之外,sway-systemd 還將每個 GUI 應用程式放在自己的 cgroup 中。這樣就可以對單個應用程式進行獨立的資源約束,參見 sway-systemd README。此外,uwsm包 提供了一個更綜合的解決方案。
啟動後更改屏幕解析度
您可以使用 GUI 程序 wdisplaysAUR、 swayrandr-gitAUR 或終端程序 wlr-randr包 來更改屏幕解析度和方向、排列顯示器以及設定縮放。
創建無外設(Headless)輸出
創建與物理 video 接口無關的輸出 (HEADLESS-1
、HEADLESS-2
等):
$ swaymsg create_output
顯示新輸出的說明:
$ swaymsg -pt get_outputs | grep -A 10 HEADLESS
使用 output
命令配置新的輸出,例如:
~/.config/sway/config
output HEADLESS-1 { pos 1920,0 mode 1280x720@75Hz }
將快捷觸發鍵修改為 CapsLock 並保留 Super
要將快捷觸發鍵修改為 CapsLock
並在 US 鍵盤布局上繼續使用 Super
,請創建 ~/.config/xkb/symbols/custom
,具有以下內容:
~/.config/xkb/symbols/custom
xkb_symbols "basic" { include "us" name[Group1]= "English (US Custom)"; key <CAPS> { [ Hyper_L ] }; modifier_map Mod4 { Hyper_L }; key <LWIN> { [ Super_L ] }; modifier_map Mod5 { Super_L }; };
對於其他語言,請編輯第二行和第三行,並在 Sway 配置文件開頭附加引用該鍵盤布局:
~/.config/sway/config
input * xkb_layout custom set $mod Mod4 set $super Mod5
通過 VNC 遠程訪問無外設(Headless) Sway 會話
以下示例教程講述了通過 SSH 啟動並通過 VNC 遠程訪問無外設 Sway 會話。
wayvnc包 是一個 VNC 伺服器,適用於基於 wlroots 的 Wayland 混成器,可以用於承載無外設 Sway 會話。
要啟動一個無外設 Sway 會話,請將 WLR_BACKENDS
設為 headless
,可選將 WLR_LIBINPUT_NO_DEVICES
設為 1
(參見 wayvnc FAQ):
$ WLR_BACKENDS=headless WLR_LIBINPUT_NO_DEVICES=1 sway
&
以使其後台運行。現在,請運行 wayvnc
以啟動 VNC 伺服器:
$ WAYLAND_DISPLAY=wayland-1 wayvnc
localhost:5900
),可以另行配置(參見 man wayvnc
)。您可能會想按照 OpenSSH#轉發其他埠 所述轉發埠。請注意 wayvnc包 默認不加密且不驗證身份!輸出熱插拔鉤子
若您想在一個輸出已連接(或未連接)時搞點事情,可以閱讀 kanshi。
疑難解答
應用程式啟動器
dmenu包 和 rofi包 在 Sway 中運行得相對較好,但都在 Xwayland 下運行,並且都存在相同的問題。如果將光標移動到原生 Wayland 窗口,Xwayland 應用程式可能會變得無響應。因為 Wayland 客戶端/窗口在不具有屏幕焦點時無法訪問輸入設備,而 Xwayland 伺服器本身就是 Wayland 混成器的客戶端,因此其 Xwayland 客戶端之一必須具有焦點才能訪問用戶輸入。一旦其某個客戶端具有焦點,其就可以收集輸入,並通過 X11 協議將其提供給所有 Xwayland 客戶端。因此,將光標移動到 Xwayland 窗口並按 Esc 鍵退出應該可以解決此問題,有時運行 pkill
也可以。
bemenu包 是一個原生的 Wayland dmenu 替代品,二者都可以選擇與 j4-dmenu-desktop包 結合使用,為啟動桌面文件提供原生 Wayland 組合(如同 i3-dmenu-desktop),例如:
j4-dmenu-desktop --dmenu='bemenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite'
如果選擇不禁用 Xwayland,則可能需要將 BEMENU_BACKEND
環境變量設置為 wayland
。
您還可以使用浮動終端和 fzf 自己手搓一個應用程式啟動器,如 GitHub issue 所述。
plasma-workspace包 軟體包提供的 krunner
應用也可以作為啟動器,支持 Xwayland 和原生 Wayland。
rofi-wayland包 是 rofi包 的一個分支,可以在 Wayland 中工作,其也提供一個 -x11
標誌以在 X11 中使用。
wofi包 是一個命令啟動器,提供了 rofi 的部分功能,運行於 Wayland。Wofi缺少 rofi 的一些功能,如 SSH 模式和窗口切換模式。其基於 wlroots包 庫,並使用 GTK3 進行渲染,與 sway 配合得很好。
fuzzel包 是一個為基於 wlroots 的 Wayland 混成器開發的應用程式啟動器,類似於 rofi 的 drun 模式。
虛擬化
Sway 可以在 VirtualBox 和 VMware ESXi 中使用。
要使 Sway 在 QEMU 中工作,必須以 -vga qxl
參數啟動QEMU。另見 QEMU#qxl。
無法從 tty 啟動 Sway
對於 ESXi, 您需要在 Hardware Configuration > Video card settings 下啟用 3D 支持。另見 VMware#在 Intel、Optimus 和 AMD 上啟用 3D 圖形加速。
光標不可見
當使用某些圖形驅動程序(例如VMSVGA圖形控制器或專有的 NVIDIA 驅動)時,光標可能會變得不可見。可以使用軟體光標來解決此問題,具體討論參見 Issue 3814:
$ export WLR_NO_HARDWARE_CURSORS=1
未檢測到 sway socket
使用 swaymsg
時(如 swaymsg -t get_outputs
)有時會返回以下消息:
sway socket not detected. ERROR: Unable to connect to
當在終端多路復用器(如 GNU Screen 或 tmux)內運行時,swaymsg
無法連接到 SWAYSOCK
中提供的套接字。
要查看當前 SWAYSOCK
的值,請執行:
$ env | grep -F "SWAYSOCK"
SWAYSOCK=/run/user/1000/sway-ipc.1000.4981.sock
欲解決該問題,您可以嘗試連接到一個正在運行的 sway 進程的套接字:
$ export SWAYSOCK=/run/user/$(id -u)/sway-ipc.$(id -u).$(pgrep -x sway).sock
欲避免此錯誤,請在終端多路復用器之外運行該命令。
無法連接 Wayland 伺服器
Tmux 會為每個會話創建環境變量(執行 tmux show-environment
以查詢),因此,若您想要使用 tmux-resurrect 或 tmux-continuum 重新恢復一個已有的 tmux 會話,或 tmux 伺服器在 sway 啟動前就在運行,環境變量就會過期。
將以下內容添加到 .tmux.conf
,之後您可以在恢復會話前使用 update-environment
更新環境變量:
set-option -g update-environment "DISPLAY WAYLAND_DISPLAY SWAYSOCK SSH_AUTH_SOCK"
無法獲取 socket 路徑
從 swaymsg -t
命令請求在tty上的消息可能會返回以下消息:
Unable to retrieve socket path
SWAYSOCK
環境變量在啟動Sway後設置,因此解決此錯誤的一個方法是在Sway內部的終端中請求 swaymsg -t [message]
。
按鍵設置和鍵盤布局
默認情況下,如果您使用多個鍵盤布局(如 input * xkb_layout "us,ru"
),在切換到某個次要布局時可能會導致快捷鍵失效。
得益於 Pull 3058 ,現在您只需在相應的 bindsym
行中添加 --to-code
,如下:
bindsym --to-code { $mod+$left focus left $mod+$down focus down $mod+$up focus up $mod+$right focus right }
亦可創建一個變量 set $mybind bindsym --to-code
,然後將所有的 bindsym
替換為 $mybind
,如下:
$mybind $mod+w thing
Java 應用程式
當打開一些基於Java的應用程式(如 JetBrains的 IntelliJ、CLion 或 PyCharm)時,可能會顯示空白畫面。欲解決該問題,可以將環境變量 _JAVA_AWT_WM_NONREPARENTING
設為 1
來啟動應用程式。
若您從應用程式啟動器(如 rofi包 或 dmenu包)啟動應用程式,則可以修改應用程式的桌面項。
OpenJDK 11 和 Sway 1.5 已經修復了一些 Java 應用程式的問題。然而,對於某些應用程式,需要進行額外的配置才能使用更新版本的 OpenJDK。對於 Android Studio,您需要設置 STUDIO_JDK=/usr/lib/jvm/java-11-openjdk/
[4]。
JRE 硬編碼了一個窗口管理器列表,但該列表不包含 Sway,若您遇到灰色面板、菜單無焦點或窗口尺寸調整錯誤等問題,可以嘗試偽裝成其它窗口管理器。
邊框上的滾動
如果在應用程式邊框上使用滑鼠滾輪導致Sway崩潰,您可以為 app_id
(例如Firefox)使用border none
來禁用邊框。
「cannot open display」 錯誤
如果一個程序啟動後出現「cannot open display」(無法打開顯示)並崩潰,那麼該應用程式很可能是 X11 程序。您可以使用 Xwayland 兼容層在 Wayland 下運行 X11 程序,詳見 #Xwayland。
WINE 中滑鼠不工作
運行程序時,WINE 需要設定一個主顯示器(primary monitor),但是 Wayland 沒有主顯示器的概念,這會引發問題(如 「clicks not registering」)。您可以使用 xrandr 為 Xwayland 指定主顯示器,只需向您的 Sway 配置添加以下內容:
~/.config/sway/config
... exec_always xrandr --output XWAYLAND0 --primary ...
若如此做,因為 Sway 的一個 bug,您需要將屏幕顯示偏移量設為 0,0
。
需要注意 XWAYLAND0(或其它 XWAYLAND 顯示名稱)可能不代表您的顯示器,其後綴數字也可能在不同會話中變化。可以使用以下配置,其可將第一個 XWAYLAND 顯示設定為主顯示器:
exec_always xrandr --output $(xrandr | grep -m 1 XWAYLAND | awk '{print $1;}') --primary
您可按需調整此配置,使用不帶參數的 xrandr
命令可以查看各
NVIDIA GPU 上遊戲閃爍
即便官方不支持 NVIDIA 之類的專有驅動,但依然可以使用,甚至可以用來玩遊戲。若如此做,您可能會看到屏幕上半區閃爍,可以嘗試將 wlroots包 替換為 wlroots-nvidiaAUR,也可以手動用補丁編譯您自己的版本。