Sway

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Sway and the translation is 98% complete.
Other languages:

Sway (SirCmpwn's Wayland compositor の略) は、i3 ウィンドウマネージャと互換性を持つように設計された、オープンソースの wlroots ベースの Wayland コンポジタです。

インストール

USE フラグ

USE flags for gui-wm/sway i3-compatible Wayland window manager

+filecaps Use Linux file capabilities to control privilege rather than set*id (this is orthogonal to USE=caps which uses capabilities at runtime e.g. libcap)
+man Build and install man pages
+swaybar Install 'swaybar': sway's status bar component
+swaynag Install 'swaynag': shows a message with buttons
X Enable support for X11 applications (XWayland)
tray Enable support for StatusNotifierItem tray specification
wallpapers Install sway's default wallpaper image

Emerge

root #emerge --ask gui-wm/sway

設定

利用可能なすべての設定オプションを表示するには:

user $man 5 sway

ファイル

sway を実行する各ユーザは、カスタマイズされた sway セッションを実行するために、デフォルト設定ファイルを編集することができます。Gentoo はこのファイルを、デフォルトの場所である /etc/sway/config に保存します:

user $mkdir -p ~/.config/sway/
user $cp /etc/sway/config ~/.config/sway/

端末エミュレータ

デフォルトでは、Sway 設定ファイルは foot 端末エミュレータ (gui-apps/foot パッケージにあります) を使用します。Sway の実行中に端末が利用できるように、この端末エミュレータを emerge するのがよいでしょう:

root #emerge --ask gui-apps/foot

他の人気のある選択肢としては x11-terms/alacrittyx11-terms/kitty があります。後者は KITTY_ENABLE_WAYLAND 環境変数が 1 に設定されていれば Wayland ネイティブで動作します。

他の超軽量な代替として st がありますが、これは Wayland ネイティブではありません。

ディスプレイ設定

ディスプレイの選択肢は以下で問い合わせることができます:

user $swaymsg -t get_outputs
Output DP-1 'HP Inc. HP X34 6CM2261GK2' (focused)
  Current mode: 3440x1440 @ 165.000 Hz
  Position: 0,0
  Scale factor: 1.000000
  Scale filter: nearest
  Subpixel hinting: unknown
  Transform: normal
  Workspace: 1
  Max render time: off
  Adaptive sync: disabled
  Available modes:
    3440x1440 @ 165.000 Hz
 
...
 
Output DP-2 'LG Electronics LG HDR QHD 110NTTQ0U193'
  Current mode: 2560x1440 @ 59.951 Hz
  Position: 3440,0
  Scale factor: 1.000000
  Scale filter: nearest
  Subpixel hinting: unknown
  Transform: normal
  Workspace: 2
  Max render time: off
  Adaptive sync: disabled
  Available modes:
    2560x1440 @ 59.951 Hz
    2560x1440 @ 74.971 Hz
 
...
 
Output DP-3 'Ancor Communications Inc VE247 E3LMQS103610'
  Current mode: 1920x1080 @ 60.000 Hz
  Position: 6000,0
  Scale factor: 1.000000
  Scale filter: nearest
  Subpixel hinting: unknown
  Transform: normal
  Workspace: 3
  Max render time: off
  Adaptive sync: disabled
  Available modes:
    1920x1080 @ 60.000 Hz

結果は希望する解像度のみを含むように省略しています。デフォルトの位置が正しく設定されていない場合は、~/.config/sway/config を変更することで調整することができます。ファイルを保存したら、$mod+Shift+C で設定を再読み込みすることができます:

ファイル ~/.config/sway/configプライマリディスプレイより物理的に少し大きい左ディスプレイを設定する
output DP-1 resolution 3440x1440@165hz pos 2560 350
ファイル ~/.config/sway/config中央にあるプライマリディスプレイを設定する
output DP-2 resolution 2560x1440@74.971hz pos 0 250
ファイル ~/.config/sway/config縦向きにされている代替ディスプレイを設定する
output DP-3 resolution 1920x1080@60hz pos 6000 0 transform 270

入力デバイス

入力デバイスは以下で問い合わせることができます:

user $swaymsg -t get_inputs
Input device: Logitech G502 HERO Gaming Mouse Keyboard
  Type: Mouse
  Identifier: 1133:49291:Logitech_G502_HERO_Gaming_Mouse_Keyboard
  Product ID: 49291
  Vendor ID: 1133
  Libinput Send Events: enabled
 
Input device: Logitech G502 HERO Gaming Mouse Keyboard
  Type: Keyboard
  Identifier: 1133:49291:Logitech_G502_HERO_Gaming_Mouse_Keyboard
  Product ID: 49291
  Vendor ID: 1133
  Active Keyboard Layout: English (US)
  Libinput Send Events: enabled
 
Input device: Logitech G502 HERO Gaming Mouse
  Type: Mouse
  Identifier: 1133:49291:Logitech_G502_HERO_Gaming_Mouse
  Product ID: 49291
  Vendor ID: 1133
  Libinput Send Events: enabled
ファイル ~/.config/sway/configマウス加速を無効化し、ポインタ移動速度を下げる
input "1133:49291:Logitech_G502_HERO_Gaming_Mouse" {
    accel_profile "flat"
    pointer_accel -0.1
}
ファイル ~/.config/sway/configタッチパッドのタップによるクリックを有効化する
input type:touchpad {
    tap enabled
}
ヒント
1 本指タップで左クリック、2 本で右クリック、3 本で中クリックです。これは tap_button_map で調整することができます。

アプリケーションランチャ

Sway は様々なアプリケーションランチャとともに使用することができます。デフォルトでは wmenu を使用しようとしますが、同時に依存として dmenu も必要とするので、Wayland ネイティブランチャとともに使用するためには再構成が必要です。

bemenu

gui-apps/bemenu をインストールして、これを使用するように sway を構成するには:

root #emerge --ask gui-apps/bemenu
ファイル ~/.config/sway/configbemenu を使用するように Sway を設定する
set $menu bemenu-run --no-exec | xargs -r swaymsg exec --
ファイル ~/.config/sway/configプロンプトなしで bemenu を使用するように Sway を設定する
set $menu bemenu-run --no-exec -p "" | xargs -r swaymsg exec --
ヒント
--line-height (-H) を 26 に設定することで、bemenu の高さを waybar にマッチさせることができます。

wmenu

デフォルトでは sway は gui-apps/wmenu を使用しようとしますが、これは次でインストールできます:

root #emerge --ask gui-apps/wmenu
メモ
デフォルトの構成は、x11-misc/dmenu パッケージの一部である dmenu_path を使用しようとします。

wmenu を使用するように sway を構成するには:

ファイル ~/.config/sway/configwmenu を使用するように Sway を設定する
set $menu wmenu-run | xargs swaymsg exec --
ファイル ~/.config/sway/configプロンプトなしで wmenu を使用するように Sway を設定する
set $menu wmenu-run -p "" | xargs swaymsg exec --

ステータスバー

Sway 自身のステータスバーの他に、Sway のための高度にカスタマイズ可能なステータスバーとして Waybar を使用することができます:

root #emerge --ask gui-apps/waybar

Sway で Waybar を有効化する単純な方法は 2 通りあります: Waybar をバーサブコマンドとして実行する方法と、通常コマンドとして実行する方法です。Sway が起動するとき (そして Sway が終了して再起動するとき) はどちらも同じように振る舞うでしょうが、Sway の再読み込み時には異なる振る舞いをします。バーサブコマンドとして Waybar またはあらゆる他のステータスバーを実行すると、Sway の再読み込み時にステータスバーは再起動されるでしょう。通常コマンドとしての Waybar を実行すると、Sway の再読み込み時にステータスバーは再起動されないでしょう; exec の代わりに exec_always で実行してもこれは解決されず、Sway の再読み込みのたびにステータスバーが増えることになるだけです。

Sway の再読み込みを利用してステータスバーの構成をテストしたいユーザは、バーサブコマンドとしての方法を使用すべきです。

ファイル ~/.config/sway/configバーサブコマンド経由で Waybar を有効化する
bar {
        # Waybar を実行する; Sway が再読み込みされたときに Waybar は再起動されます。
        status_command waybar
 
        # Sway の組み込みステータスバーを隠します。
        mode invisible
}
ファイル ~/.config/sway/config通常コマンド経由で Waybar を有効化する
# Waybar を実行する; Sway が再読み込みされたときに Waybar は再起動されません。
exec waybar

明るさ調節

バックライトの明るさ調節方法には複数の選択肢があります。/sys/class/backlight/<device>/brightness に書き込むことによって行うこともできます。

acpilight

代わりに、sys-power/acpilightxbacklight 互換コマンドを利用して、明るさの変更を同じように行うことができます:

ファイル ~/.config/sway/config画面の明るさのサポートのためのキーボードショートカットを設定する
bindsym XF86MonBrightnessDown exec xbacklight -dec 2
bindsym XF86MonBrightnessUp exec xbacklight -inc 4

brightnessctl

app-misc/brightnessctl::guru にあり、簡単にバックライトを調整するのに使用できます:

ファイル ~/.config/sway/configbrightnessctl キーバインドを追加する
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym XF86MonBrightnessUp exec brightnessctl set 5%+

light

警告
dev-libs/lightgithub ページでは現在 (2023-09) このように言及されています: 「このプロジェクトは 2023 年 3 月 8 日以来放棄されていると見なされています。他の開発者が引き継ぐまで、使用することはおすすめできません。」現在もパッケージは Gentoo ebuild リポジトリに残っていますが、ユーザは開発者からのメッセージを考慮に入れておくのがよいでしょう。

バックライトと明るさを調節するためには dev-libs/light を使用することができます。以下は設定例です:

ファイル ~/.config/sway/config画面の明るさのサポートのためのキーボードショートカットを設定する
bindsym XF86MonBrightnessDown exec light -U 2
bindsym XF86MonBrightnessUp exec light -A 4

通知

gui-apps/mako は通知デーモンとして使用することができます。

ファイル ~/.config/sway/configSway 開始時に mako デーモンを起動する
exec mako

音量調節

XF86AudioRaiseVolume および XF86AudioLowerVolume キーコードは一般的な手段として存在し、システムボリュームを調整するために使用されます。オーディオバックエンドに応じて、このキーのキーバインドを設定しなくてはなりません。

Pipewire

PipeWire を使用している場合は、音量を変更するために次の設定を利用することができます (Wireplumber を利用します):

ファイル ~/.config/sway/configPipeWire の音量を変更するためのキーボードショートカットを設定する
bindsym XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_SINK@ 5%+
bindsym XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_SINK@ 5%-

Pulseaudio

pulseaudio を使用している場合は、音量を変更するために次の設定を利用することができます:

ファイル ~/.config/sway/configpulseaudio の音量を変更するためのキーボードショートカットを設定する
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%

ALSA

ALSA を使用している場合は、音量を変更するために次の設定を利用することができます:

ファイル ~/.config/sway/configALSA の音量を変更するためのキーボードショートカットを設定する
bindsym XF86AudioRaiseVolume exec amixer -Mq set Speaker 5%+
bindsym XF86AudioLowerVolume exec amixer -Mq set Speaker 5%-

sndio

media-sound/sndio を使用している場合は、音量を変更するために次の設定を利用することができます:

ファイル ~/.config/sway/configsndio の音量を変更するためのキーボードショートカットを設定する
bindsym XF86AudioRaiseVolume exec sndioctl -f snd/default output.level=+0.05
bindsym XF86AudioLowerVolume exec sndioctl -f snd/default output.level=-0.05

スクリーンショットを撮る

シンプルなアプローチ: slurpshot を使用する

(Slurpshot) はスクリーンショットの撮影を簡単にするためのスクリプトです。ネイティブ wayland アプリのみを使用し、特定のウィンドウのみの選択や、スクリーンショットを保存せずにプレビューしたり印刷したりすることができます。まず、依存パッケージをインストールしてください:

root #emerge --ask gui-apps/grim gui-apps/slurp app-misc/jq dev-libs/bemenu

slurpshot スクリプトを PATH 内のどこか、例えば ~/bin に置き、実行可能にして、キーバインドを設定するだけです:

ファイル ~/.config/sway/configslurpshot サポートのためのキーボードショートカットを設定する
#
# Screen capture
#
bindsym Print exec slurpshot

手動アプローチ

スクリーンショットサポートを追加するには、grim ユーティリティ (gui-apps/grim パッケージにあります) を使用してください。grimGrab Images (「画像をさっと撮る」という意味) の略として定義されています。このユーティリティは Wayland プロトコルの詳細に合わせて作られています。grim をインストールするには、次のコマンドを使用してください:

root #emerge --ask gui-apps/grim

選択された画面範囲の境界を決定するサポートを追加するには、slurp ユーティリティ (gui-apps/slurp パッケージにあります) を grim ユーティリティと組み合わせて使用します。slurp をインストールするには、次のコマンドを使用してください:

root #emerge --ask gui-apps/slurp

クリップボードサポートを追加するためには、gui-apps/wl-clipboard にある wl-clipboard を使用します。 wl-clipboard をインストールするためには、次のコマンドを使用してください:

root #emerge --ask gui-apps/wl-clipboard

次に、スクリーンショット操作を実行するキーボードショートカットのサポートを追加するために、設定ファイルを編集してください:

ファイル ~/.config/sway/configスクリーンショットサポートのためのキーボードショートカットを設定する
#
# Screen capture
#
set $ps1 Print
set $ps2 Control+Print
set $ps3 Alt+Print
set $ps4 Alt+Control+Print
set $psf $(xdg-user-dir PICTURES)/ps_$(date +"%Y%m%d%H%M%S").png
 
bindsym $ps1 exec grim - | wl-copy
bindsym $ps2 exec grim -g "$(slurp)" - | wl-copy
bindsym $ps3 exec grim $psf
bindsym $ps4 exec grim -g "$(slurp)" $psf

Print または Ctrl + Print キーの組み合わせによって、wl-copy バッファにスクリーンショットが作成されることに注意してください。これにより、画像をディスク上のファイルとして保存することなく、クリップボードから直接貼り付けることができます。

Alt + Print または Alt + Ctrl + Print キーボードショートカットでは、Pictures ユーザディレクトリ内に画像ファイルを自動的に保存する方法が利用されます。

Snipping tool 風の挙動

以下の設定では、mod+shift+S が押されたときに画面範囲をクリップボードへとキャプチャします:

ファイル ~/.config/sway/configsnipping tool と類似する機能
bindsym $mod+shift+s exec grim -g "$(slurp)" - | wl-copy
メモ
-ggrim に対して領域を切り取るように指定し、$(slurp) で領域を取得します。スクリーンショットは stdout に出力され、wl-copy はこのファイルをクリップボードへとコピーします。

ランダム壁紙を設定する

フォルダからランダムな壁紙を選んで設定することができます: [1]

ファイル ~/.config/sway/configフォルダからランダム壁紙を設定する
set $wallpapers_path $HOME/Pictures/Wallpapers
output * bg $(find $wallpapers_path -type f | shuf -n 1) fill

Swaylock

現在のセッションをロックするためには、gui-apps/swaylock を使用することができます。

root #emerge --ask gui-apps/swaylock
ファイル ~/.config/sway/config$mod+l が押されたときにセッションをロックする
bindsym $mod+l exec swaylock --ignore-empty-password --show-failed-attempts --color 1e1e1e
ファイル ~/.config/sway/config色付き、詳細は man swaylock を参照
bindsym $mod+l exec swaylock --ignore-empty-password --show-failed-attempts \
    --color 1e1e1e --inside-color cccccc --ring-color ffffff \
    --inside-clear-color 11a8cd --ring-clear-color 29b8db \
    --inside-ver-color 2472c8 --ring-ver-color 3b8eea \
    --inside-wrong-color cd3131 --ring-wrong-color f14c4c
警告
アカウントがロックされた場合でも、swaylock はそのことを示さずに、単に失敗します。別の TTY に切り換えてログインを試すことで、ロックされていることを突き止めることができます

Swayidle

gui-apps/swayidle は一定のアイドル時間経過後に、典型的にはロックや画面の電源を切るために、コマンドを実行します。

root #emerge --ask gui-apps/swayidle
ファイル ~/.config/sway/config15 分のアイドル後にすべてのディスプレイの電源を切る
exec swayidle -w \
  timeout 900 'swaymsg "output * power off"' \
  resume 'swaymsg "output * power on"'

HiDPI

HiDPI ディプレイ (4K 以上) に対する sway のレンダリングを調節するためには、まず調節したいディスプレイの名前を取得する必要があります。sway セッションの実行中に、以下を実行してください:

user $swaymsg -t get_outputs
メモ
swaymsg コマンドをシステムで利用できるようにするには、swaymsg USE フラグが有効化されている必要があります

sway 設定ファイルの output 文は、高解像度ディスプレイのスケーリングを調節するための scale パラメータを受け付けます。

Xresources

ファイル ~/.config/sway/configsway リロード時に ~/.Xresources をリロードする
exec_always test -f ~/.Xresources && xrdb -merge ~/.Xresources

GTK 設定

ダークモード

GTK3

GTK3 ダークモードは以下を設定することで有効化できます:

ファイル ~/.config/gtk-3.0/config.inigtk3 ダークモードを有効化する
[Settings]
gtk-application-prefer-dark-theme = true
GTK2

GTK2 はダークモードの切り換え機能を持っていないため、ダークテーマを選択する必要があります:

ファイル ~/.gtkrc-2.0gtk3 ダークモードを有効化する
gtk-theme-name = "Adwaita-dark"

GTK3 テーマとフォント

現時点で GTK フォントとテーマの設定は、sway の設定ファイルを編集することで行うべきです (Sway の wiki も参照してください):

ファイル ~/.config/sway/configGTK アプリケーションのためのフォントとテーマを設定する
set $gnome-schema org.gnome.desktop.interface
exec_always {
    gsettings set $gnome-schema gtk-theme 'theme name'
    gsettings set $gnome-schema icon-theme 'icon theme name'
    gsettings set $gnome-schema cursor-theme 'cursor theme name'
    gsettings set $gnome-schema font-name 'Sans 10'
}

特定のアプリケーション (sway も含め) でマウスカーソルの設定の問題に遭遇した場合は、これで解消するかもしれません:

ファイル ~/.config/sway/configカーソルテーマを設定する
seat seat0 xcursor_theme custom_cursor_theme custom_cursor_size

custom_cursor_themecustom_cursor_size の部分は置き換えてください。Adwaita24 はすべての Linux ディストリビューションでほぼデフォルトです。

自動フローティングウィンドウ

デフォルトでは、Sway は新しいウィンドウをタイルモードで開きます。以下の設定スニペットは、フロートで表示すべき多くのウィンドウをフロートで表示させます:

ファイル ~/.config/sway/configより合理的なフローティングウィンドウ[2]
for_window [window_role = "pop-up"] floating enable
for_window [window_role = "bubble"] floating enable
for_window [window_role = "dialog"] floating enable
for_window [window_type = "dialog"] floating enable
for_window [window_role = "task_dialog"] floating enable
for_window [window_type = "menu"] floating enable
for_window [app_id = "floating"] floating enable
for_window [app_id = "floating_update"] floating enable, resize set width 1000px height 600px
for_window [class = "(?i)pinentry"] floating enable
for_window [title = "Administrator privileges required"] floating enable

Firefox 向けの調整

ファイル ~/.config/sway/config関連する Firefox ウィンドウをフロート表示する[3]
for_window [title = "About Mozilla Firefox"] floating enable
for_window [window_role = "About"] floating enable
for_window [app_id="firefox" title="Library"] floating enable, border pixel 1, sticky enable
ファイル ~/.config/sway/configFirefox の画面共有インジケータウィンドウを削除する[4]
for_window [title = "Firefox - Sharing Indicator"] kill
for_window [title = "Firefox — Sharing Indicator"] kill

Steam 向けの調整

ファイル ~/.config/sway/configSteam ダイアログウィンドウをフロート表示する[5]
for_window [class="^Steam$" title="^Friends$"] floating enable
for_window [class="^Steam$" title="Steam - News"] floating enable
for_window [class="^Steam$" title=".* - Chat"] floating enable
for_window [class="^Steam$" title="^Settings$"] floating enable
for_window [class="^Steam$" title=".* - event started"] floating enable
for_window [class="^Steam$" title=".* CD key"] floating enable
for_window [class="^Steam$" title="^Steam - Self Updater$"] floating enable
for_window [class="^Steam$" title="^Screenshot Uploader$"] floating enable
for_window [class="^Steam$" title="^Steam Guard - Computer Authorization Required$"] floating enable
for_window [title="^Steam Keyboard$"] floating enable

サービス

OpenRC

OpenRC ベースのシステムでは、elogindboot ランレベルに追加する必要があります:

root #rc-update add elogind boot

使い方

Sway を開始する

ヒント
公式にサポートされてはいませんが、一部のディスプレイマネージャは sway とともに機能するかもしれません。[6]
メモ
dbus とともに Sway を開始するには、XDG_RUNTIME_DIR 変数が設定されている必要があります。elogind または systemd が使用されていれば、それがこの変数を設定するでしょう。dbus-run-session を省略すると、実行時エラーが発生するかもしれません。

TTY ログイン時に Sway を自動的に起動する

最初の TTY にログインしたときに Sway を開始するには:

ファイル ~/.bashrc最初の TTY へのログイン後に Sway を起動する
if [ -z "${WAYLAND_DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
    dbus-run-session sway
fi
tty1 上での自動ログイン

tty1 上での自動ログインを有効化するためには、/etc/inittab で定義されている tty1 の agetty インスタンスに、--skip-login および --login-options を追加することができます:

ファイル /etc/inittabtty1 上で Larry として自動的にログインする
c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux --skip-login --login-options larry

手動で Sway を開始する

user $dbus-run-session sway

スクリプトから Sway を起動する

この方法では、仮想端末を強制的に乗っ取り、その中で Sway を起動するスクリプトを使用します。典型的なユースケースは、ブート時に自動的に Sway を起動する場合です。

メモ
Sway はこの方法で起動されることを想定していません。動作させるためにスクリプトを多少調整する必要があるかもしれません。
ファイル /usr/sbin/sway_launcherSway ランチャ
#!/bin/sh
 
# 特定の仮想端末 (vt) から特定のユーザで sway を起動します
# 2 個の引数を期待します: ユーザ名 (例: larry) と空き vt の id (例: 7)
 
# ユーザのために tty を準備する。vtX は /dev/ttyX を使用する
chown "$1" "/dev/tty${2}"
chmod 600 "/dev/tty${2}"
 
# ユーザのためにまっさらな環境を構築し、対象 vt を乗っ取り、sway を起動する
su --login --command "openvt --switch --console ${2} -- sway >\${HOME}/.sway_autolauncher.log 2>&1" "$1"
# このスクリプトは直ちに制御を返す

このスクリプトにはいくつかの制約があります:

  • XDG_RUNTIME_DIR が定義され妥当な値であることが期待されます。上の節を参照してください。
  • openvt の --switch オプションが無いと、異なる VT に切り換えようとしたとき (Ctrl+Alt+Fn) に sway はフリーズするでしょう。これがバグなのかどうかは不明です。
  • Sway が終了したときに VT はクリアされません。deallocvt を呼び出してクリアしてください。
  • 同様に、Sway が終了したときに TTY の所有者とモードはデフォルト値に戻されません。

ローカルサービスを利用して、このスクリプトをブート時に起動することができます:

ファイル /etc/local.d/sway.startブート時に Sway を起動する
#!/bin/sh
sway_launcher larry 7

elogind または systemd を使わずに Sway を開始する

systemd も elogind も使用しないように設定されたシステムでは、XDG_RUNTIME_DIR 変数を設定するためのシェルスクリプトを作成する (または他の手段を使用する) 必要があります。

環境変数は通常の設定ファイルで定義することができます。例えば、 Larry the cow (Larry) が自身のシェルの設定ファイル内で XDG_RUNTIME_DIR 変数を設定し、ディレクトリを /tmp 内に置くことを選択した場合は:

ファイル /home/larry/.bash_profileXDG_RUNTIME_DIR 変数を設定する
#!/bin/sh
if test -z "${XDG_RUNTIME_DIR}"; then
  export XDG_RUNTIME_DIR=/tmp/"${UID}"-runtime-dir
    if ! test -d "${XDG_RUNTIME_DIR}"; then
        mkdir "${XDG_RUNTIME_DIR}"
        chmod 0700 "${XDG_RUNTIME_DIR}"
    fi
fi

XDG_RUNTIME_DIR を定義したら、通常通り sway を起動することができます:

user $dbus-run-session sway

問題に遭遇した場合は、IRC (#sway (webchat)) 上の Sway コミュニティに連絡を取ったり新しい Gentoo バグを開く前に、GitHub 上の Sway の issues を確認してください。

移動

すべてのキーコンビネーションは ~/.config/sway/config 設定ファイルで定義されます。

$mod のデフォルト値としては、 Super キーが定義されています。ほとんどのキーボードではこれは Windows キーのことです。

Sway は Vi 風のインターフェースを持っています。ウィンドウの移動には矢印キーにくわえて、h (左)、j (下)、k (上)、および l (右) を使用することができます。

フォーカスは mod+方向キー で移動でき、ウィンドウ自体は mod+shift+方向キー で移動することができます:

ファイル ~/.config/sway/configデフォルトの移動の定義
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
 
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

さらなる情報については man 5 sway-input を参照してください。

便利なキーバインド

ファイル ~/.config/sway/configmod+control+mod+control+ でワークスペースを切り換える
bindsym $mod+control+Right workspace next
bindsym $mod+control+Left workspace prev

レイアウト

デフォルトでは Sway はタイル型レイアウトを使用します。レイアウトモードは以下のデフォルトのキーバインドを使って切り換えることができます:

  • mod+b - 水平分割
  • mod+v - 垂直分割
  • mod+s - スタック表示
  • mod+w - タブ表示
  • mod+e - 分割方向のトグル
  • mod+shift+space - フローティング表示のトグル
ファイル ~/.config/sway/configデフォルトのレイアウト定義
bindsym $mod+b splith
bindsym $mod+v splitv
 
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
 
bindsym $mod+Shift+space floating toggle

端末

端末エミュレータを開くためのデフォルトのキーの組み合わせは、$mod+Enter です。

Foot サーバ

Foot は最小限の Wayland 端末エミュレータですが、リソース使用量を抑えるためにサーバとして実行するように設定することもできます。

ファイル ~/.config/sway/configSway とともに Foot サーバを開始する
exec foot -s
ファイル ~/.config/sway/configデフォルトの端末を foot クライアントに設定する
set $term footclient
メモ
If starting the foot server with Sway, it may not start fast enough to also auto-start a service, exec swaymsg "workspace 2; exec $term {command}" may be slow enough to mitigate this

機能を追加する

Sway は拡張可能なように設計されており、追加機能を追加するのは簡単です:

ファイル ~/.config/sway/configcontrol+shift+esc が押されたときに htop を開始する
bindsym control+shift+escape exec $term htop

foot を使用する場合は、-a で設定される app_id を設定して、自動でフロートさせることができます:

ファイル ~/.config/sway/configcontrol+shift+esc が押されたときにフロート表示で htop を開始する
bindsym control+shift+escape exec $term -a 'flying-foot' htop
for_window [app_id="flying-foot"] floating enable

Moving left and right with non-existing workspaces

Sway can switch to the left (prev) or right (next) workspace as long as there exists a workspace to switch to in that direction; this includes moving containers to those workspaces:

ファイル ~/.config/sway/config
set $super mod4
bindsym $super+alt+left  workspace prev
bindsym $super+alt+right workspace next
bindsym $super+control+alt+left  move container to workspace prev, workspace prev
bindsym $super+control+alt+right move container to workspace next, workspace next

To be able to switch to non-existing workspaces, we can create a script to tell Sway to switch to a specific workspace:

ファイル ~/.config/sway/config
set $super             mod4
set $num_of_workspaces 10
bindsym $super+alt+left          exec swaymsg -pt get_workspaces | gawk -f ~/.config/sway/workspace.gawk -v move_type="left"  -v num_of_workspaces=$num_of_workspaces
bindsym $super+alt+right         exec swaymsg -pt get_workspaces | gawk -f ~/.config/sway/workspace.gawk -v move_type="right" -v num_of_workspaces=$num_of_workspaces
bindsym $super+control+alt+left  exec swaymsg -pt get_workspaces | gawk -f ~/.config/sway/workspace.gawk -v move_type="container_left"  -v num_of_workspaces=$num_of_workspaces
bindsym $super+control+alt+right exec swaymsg -pt get_workspaces | gawk -f ~/.config/sway/workspace.gawk -v move_type="container_right" -v num_of_workspaces=$num_of_workspaces
ファイル ~/.config/sway/workspace.gawk
#!/bin/gawk -f
 
$3 == "(focused)" {
	switch(move_type) {
	case "left":
		if ($2 == 1)
			$2=num_of_workspaces+1
		system("sway workspace "$2-1)
		exit
	
	case "right":
		if ($2 == num_of_workspaces)
			$2=0
		system("sway workspace "$2+1)
		exit
	
	case "container_left":
		if ($2 == 1)
			$2=num_of_workspaces+1
		system("sway move container to workspace "$2-1", workspace "$2-1)
		exit
	
	case "container_right":
		if ($2 == num_of_workspaces)
			$2=0
		system("sway move container to workspace "$2+1", workspace "$2+1)
		exit
	}
}

トラブルシューティング

画面共有が機能しない

パッケージ gui-libs/xdg-desktop-portal-wlr がインストールされていることを確認してください。デフォルトではこれは D-Bus によって自動開始されますが、Sway によって export される環境変数を必要とするのに D-Bus セッションが Sway より先に開始されてしまうことで、実行に失敗することがあります。これを修正するためには、以下の行を Sway の設定の先頭に追加することで D-Bus 環境を更新してください:

ファイル ~/.config/sway/config
exec --no-startup-id dbus-update-activation-environment --all

PipeWire が正しく動作しているか確認するために、このリンクも参照してください。XDG_CURRENT_DESKTOP=sway も確認してください。

Failed to connect to user bus

[swaybar/tray/tray.c:42] Failed to connect to user bus: No such file or directory

Warning: no icon themes loaded

[swaybar/tray/icon.c:348] Warning: no icon themes loaded

これは x11-themes/hicolor-icon-theme を探しています。

No backend was able to open a seat

[ERROR] [wlr] [libseat] [libseat/libseat.c:78] No backend was able to open a seat

sys-auth/seatd または sys-auth/elogind のようなシート管理デーモンを探しています。XDG_RUNTIME_DIR の設定が必要かどうかも確認してください。

重要
sys-auth/seatd を使用する場合は server USE フラグが必要です。

アプリケーションがログイン状態を覚えてくれない

一部のアプリケーション (例: net-misc/nextcloud-client) は、ログインのための資格情報を保存するために Secret-Service-Agent を使用します。アプリケーションが実行のたびにアカウントの資格情報を求めてくる場合は、Secret-Service-Agent が正しく設定されていないことが原因かもしれません。

まず、gnome-base/gnome-keyring を emerge してください。

root #emerge --ask gnome-base/gnome-keyring

次に、gnome-keyring USE フラグを有効化してください。

ファイル /etc/portage/package.use
# Sway Secret-Service-Agent
*/* gnome-keyring

新しい USE フラグを適用してシステムを更新してください。

root #emerge -avuDN @world

Sway セッションにログインしている間、Agent を実行してストレージを開錠するには、これらの 2 ファイルを編集してください。

ファイル ~/.config/sway/config
exec dbus-update-activation-environment --all
exec gnome-keyring-daemon --start --components=secrets
exec export $(gnome-keyring-daemon)
ファイル /etc/pam.d/login
auth      optional  pam_gnome_keyring.so
password  optional  pam_gnome_keyring.so
session   optional  pam_gnome_keyring.so auto_start

関連項目

  • i3 — a minimalist tiling window manager, completely written from scratch.
  • Wayland — a replacement for the X11 window system protocol and architecture with the aim to be easier to develop, extend, and maintain
  • Weston — a reference implementation of a Wayland compositor.

参照