Sway
関連記事
sway (SirCmpwn's Wayland window manager) は i3 と互換性のある Wayland コンポジタを作成しようという試みです。公式ウェブサイト より:
- Sway は Wayland において Xorg の i3 ウィンドウマネージャの代わりとなるウィンドウマネージャです。既存の i3 設定で動作し i3 の機能のほとんどをサポートしています。
インストール
sway は sway パッケージでインストールできます。最新の開発版は wlroots-gitAUR と sway-gitAUR でインストールできます。sway は wlroots に緻密に依存しているので、sway 更新時には wlroots も更新するのが望ましいです。
また、画面をロックする swaylock や、アイドル時間管理デーモンの swayidle もインストールできます。
デフォルトのアプリケーションランチャーは dmenu であり、ターミナルエミュレータは alacritty です。インストールするか、あるいは設定ファイルで別のアプリケーションに変更するかを、初回起動の前に行なうことが望ましいです。
sway の起動
ターミナルから
ターミナルに sway
と入力すれば sway が起動します。
TTY ログイン時に自動起動
X と同様に、Sway はシェル初期化ファイルに以下を追加することで開始できます。(コマンドシェル#ログインシェルを参照):
if [ -z $DISPLAY ] && [ "$(tty)" == "/dev/tty1" ]; then exec sway fi
詳細については、xinitrc#ログイン時に X を自動起動 を参照してください。
ディスプレイマネージャを使う
sway のセッションは /usr/share/wayland-sessions/sway.desktop
にあります。GDM や SDDM などのディスプレイマネージャは自動的にセッションを認識します。
あるいは、テキストベースのセッションマネージャを使うこともできます。ディスプレイマネージャ#コンソールを参照してください。
設定
i3 を既に使っている場合、i3 の設定を ~/.config/sway/config
にコピーすればそのまま動作します。i3 を使ったことがない場合は、サンプル設定ファイルを ~/.config/sway/config
にコピーしてください。サンプル設定ファイルは /etc/sway/config
にあります。ただし DFALLBACK_CONFIG_DIR
フラグが設定されている場合は存在しません。設定方法は sway(5) を見てください。
キーマップ
デフォルトでは、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"
なお、Sway は起動時に XKB_DEFAULT_LAYOUT
や XKB_DEFAULT_VARIANT
などの環境変数を読み込みますが、環境変数よりも設定ファイルの内容が優先されます。
詳細は sway-input(5) および xkeyboard-config(7) を参照してください。
キーのオートリピート設定
Typematic Delay (オートリピート開始までの時間) と Typematic Rate (1秒間のリピート回数) は、input
セクションに以下の行を加えると変更できます。設定項目について詳しくはコンソールでのキーボード設定#typematic delay と rate の調整を参照してください。
~/.config/sway/config
input <identifier> repeat_delay 300 input <identifier> repeat_rate 30
ステータスバー
ステータスバーを表示したいときは i3status プログラムをインストールするのが簡単です。sway の設定の末尾に以下のスニペットを追加するだけで表示できます:
~/.config/sway/config
bar { status_command i3status }
i3status をカラー出力させたい場合、i3status の設定の以下の部分を調整してください:
~/.config/i3status/config
general { colors = true interval = 5 }
どちらの例でも、システム全体にインストールされた設定ファイルはユーザーディレクトリにコピーされるので、それを修正してください。
壁紙
Sway 1.1 以降、壁紙機能は swaybg に分割され、output
コマンドを動作させるのに必要です。
以下の行を sway の設定の最後に追加することで、全ての画面 ("*"
という名前にマッチする画面) で背景画像を設定できます:
~/.config/sway/config
output "*" background /path/to/image.jpg fill
ファイルの名前やパスは適当に置き換えて下さい。
また、背景は単一色にもできます:
output * bg #000000 solid_color
入力デバイス
特定の入力デバイスの設定を調整することができます。例えば、タッチパッドの tap-to-click とナチュナルスクロールを有効にするには、以下の input ブロックを追加:
~/.config/sway/config
input "2:14:ETPS/2_Elantech_Touchpad" { tap enabled natural_scroll enabled }
デバイスの識別子は以下のコマンドで確認できます:
$ swaymsg -t get_inputs
上記のコマンドの出力には、"/" などの記号をエスケープするために "\" が付いていることがあります (例: "2:14:ETPS\/2_Elantech_Touchpad"
)。設定に追加するときはエスケープを取り除いてください。
アクセラレーションなど他のオプションについては sway-input(5) で詳細を確認できます。
HiDPI
設定ファイルの output
コマンドでディスプレイのスケールファクタを設定してください。スケールファクタは小数でも指定できます。HiDPI ディスプレイの場合は 2 などに設定してください。
output <name> scale <factor>
ディスプレイの名前は以下のコマンドで確認できます:
$ swaymsg -t get_outputs
カスタムキーバインド
キーボードの特殊なキーを使ってコマンドを実行することができます。例えば、ボリュームや画面の明るさを制御するには:
~/.config/sway/config
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume $(pacmd list-sinks |awk '/* index:/{print $3}') +5% bindsym XF86AudioLowerVolume exec pactl set-sink-volume $(pacmd list-sinks |awk '/* index:/{print $3}') -5% bindsym XF86AudioMute exec pactl set-sink-mute $(pacmd list-sinks |awk '/* index:/{print $3}') toggle bindsym XF86MonBrightnessDown exec brightnessctl set 5%- bindsym XF86MonBrightnessUp exec brightnessctl set +5%
brightnessctl を使うことで輝度を制御できます。輝度や色補正を制御するユーティリティについてはバックライトを見てください。
.Xresources
sway で使用するには .Xresources
を .Xdefaults
にコピーしてください。
XWayland
"cannot open display" というエラーでプログラムが起動しない場合、X上で動作するプログラムであることが考えられます。XWayland 互換レイヤーを使うと Wayland 上で動作させられます。xorg-server-wayland[リンク切れ: パッケージが存在しません] パッケージをインストールしてください。
一方、XWayland を無効化し、Sway の純粋な Wayland セッションを使うには次のようにします:
~/.config/sway/config
xwayland disable
ヒントとテクニック
ログイン時に自動起動
tty1 にログインしたときに起動するには、以下を .bash_profile
に追加してください:
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then exec sway fi
CapsLock/NumLock の有効化
CapsLock や NumLock を有効にするには:
~/.config/sway/config
input * xkb_capslock enable input * xkb_numlock enable
dmenu は XWayland 上で動作するため、フォーカスが他のところへ移るとアプリケーションは反応しなくなります。反応しなくなった dmenu を元に戻すには sway を再起動する必要があります。rofi を使用するという案もありますが、rofi をメニューとして使用するには、urxvt など wayland ネイティブではない仮想端末から起動しなくてはなりません。Sway でメニューとして起動してもメニューにフォーカスが移りません (rofi にマウスを載せないと入力が通りません)。詳しくは https://github.com/swaywm/sway/issues/1367#issuecomment-332910152 を参照。
カーソルテーマとカーソルの大きさ
カーソルテーマ やカーソルの大きさを変更するには:
~/.config/sway/config
seat seat0 xcursor_theme my_cursor_theme my_cursor_size
my_cursor_theme
は Default
, Adwaita
, Simple-and-Soft
などに置きかえ、my_cursor_size
は 48
などに置きかえます。
変更を反映させるにはアプリケーションを再起動してください。
さらなる詳細はカーソルテーマと sway-input(5) を参照。
既知の問題
仮想環境で使う
Sway は VirtualBox や VMware ESXi 上でも動作するものの、場合によっては設定が必要です。
Sway を tty から起動できない
3D アクセラレーションを有効にする必要があります。VMware#Intel と Optimus で 3D グラフィックを有効化 を参照してください。
マウスカーソルが表示されない
VMSVGA グラフィックコントローラーを使うとカーソルが表示されません。Sway 起動時に WLR_NO_HARDWARE_CURSORS
変数を設定すると解決します。詳細は [1] を参照してください。
Sway Socket Not Detected
ターミナルマルチプレクサ (例: GNU Screen や tmux) の中で swaymsg -t get_outputs
などのように swaymsg
を使ったときに、以下のようなメッセージが返ってくることがあります:
sway socket not detected. ERROR: Unable to connect to
これは swaymsg
が SWAYSOCK
のソケットに接続できないことを意味しています。
SWAYSOCK
の現在の値を確認するには:
$ env | fgrep SWAYSOCK SWAYSOCK=/run/user/1000/sway-ipc.1000.4981.sock
最初の sway ソケットにアタッチしてみて、コマンドを再実行してみてください:
$ export SWAYSOCK=$(ls /run/user/*/sway-ipc.*.sock | head -n 1)
上記のエラーを解決するには、マルチプレクサの外でコマンドを実行する必要があります。
Unable to retrieve socket path
tty から swaymsg -t
を実行すると、
Unable to retrieve socket path
というメッセージが表示されます。これは SWAYLOCK
環境変数が Sway 起動後に設定されるためで、swaymsg
は Sway 内のターミナルで実行してください。
ディスプレイの解像度が正しくない
output "HDMI-A-1" res 1280x1024
などの設定オプションで解像度が正しく設定できない場合があります。解像度の設定は wlc コンポジタが受け持っており、TTY からディスプレイの解像度を認識します。
video=HDMI-A-1:1280x1024:e
などのカーネルパラメータを指定したりカスタム EDID バイナリ (Kernel Mode Setting を参照) を使用することで TTY の解像度を変えられる場合があります (WLC や Sway の解像度も変わります)。