Sway

提供: ArchWiki
2020年7月1日 (水) 20:14時点におけるHiromi-mi (トーク | 投稿記録)による版 (→‎キーマップ: 英語版に追従)
ナビゲーションに移動 検索に移動

sway (SirCmpwn's Wayland window manager) は i3 と互換性のある Wayland コンポジタを作成しようという試みです。公式ウェブサイト より:

Sway は Wayland において Xorg の i3 ウィンドウマネージャの代わりとなるウィンドウマネージャです。既存の i3 設定で動作し i3 の機能のほとんどをサポートしています。

現状

Release sway 1.0 にあるように、Sway は基本的に100% i3 と互換です。実装された機能と、実装されていない機能については以下のリンクを参照してください:

インストール

swaysway パッケージでインストールできます。最新の開発版は wlroots-gitAURsway-gitAUR でインストールできます。swaywlroots に緻密に依存しているので、sway 更新時には wlroots も更新するのが望ましいです。

また、画面をロックする swaylock や、アイドル時間管理デーモンの swayidle もインストールできます。

デフォルトのアプリケーションランチャーは dmenu であり、ターミナルエミュレータは alacritty です。インストールするか、あるいは設定ファイルで別のアプリケーションに変更するかを、初回起動の前に行なうことが望ましいです。

sway の起動

ヒント: ウィンドウ装飾ライブラリなど設定する必要がある環境変数については Wayland#GUI ライブラリを参照。

ターミナルから

ターミナルに sway と入力すれば sway が起動します。

ディスプレイマネージャを使う

ノート: Sway は公式にはディスプレイマネージャをサポートしていません。

sway のセッションは /usr/share/wayland-sessions/sway.desktop にあります。GDMSDDM などのディスプレイマネージャは自動的にセッションを認識します。

あるいは、テキストベースのセッションマネージャを使うこともできます。ディスプレイマネージャ#コンソールを参照してください。

設定

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_LAYOUTXKB_DEFAULT_VARIANT などの環境変数を読み込みますが、環境変数よりも設定ファイルの内容が優先されます。

詳細は sway-input(5) および xkeyboard-config(7) を参照してください。

ステータスバー

ステータスバーを表示したいときは 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 /home/onny/pictures/fredwang_norway.jpg fill

ファイルの名前やパスは適当に置き換えて下さい。

入力デバイス

特定の入力デバイスの設定を調整することができます。例えば、タッチパッドの 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 にコピーしてください。

ヒントとテクニック

ログイン時に自動起動

tty1 にログインしたときに起動するには、以下を .bash_profile に追加してください:

if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
  exec sway
fi

dmenu 代替

dmenu は XWayland 上で動作するため、フォーカスが他のところへ移るとアプリケーションは反応しなくなります。反応しなくなった dmenu を元に戻すには sway を再起動する必要があります。rofi を使用するという案もありますが、rofi をメニューとして使用するには、urxvt など wayland ネイティブではない仮想端末から起動しなくてはなりません。Sway でメニューとして起動してもメニューにフォーカスが移りません (rofi にマウスを載せないと入力が通りません)。詳しくは https://github.com/swaywm/sway/issues/1367#issuecomment-332910152 を参照。

既知の問題

VirtualBox を使う

Sway は VirtualBox との相性があまり良くありません (あるいは全く動作しません)。

Sway Socket Not Detected

ターミナルマルチプレクサ (例: GNU Screen や tmux) の中で swaymsg -t get_outputs などのように swaymsg を使ったときに、以下のようなメッセージが返ってくることがあります:

sway socket not detected.
ERROR: Unable to connect to

これは swaymsgSWAYSOCK のソケットに接続できないことを意味しています。

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 の解像度も変わります)。

参照