Sway

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

sway (SirCmpwn's Wayland compositor [1] から派生) は i3 と互換性を持つように設計された Wayland コンポジタです。公式ウェブサイト より:

Sway はタイリング Wayland コンポジタであり、X11 の i3 ウィンドウマネージャの代替品です。既存の i3 設定で動作し、i3 の機能に加えて、いくつかの追加機能をサポートしています。

見た目に興味がある場合は、Sway のフォークとして swayfxAUR が存在します。

目次

インストール

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

ノート: NVIDIA を含む、すべてのプロプライエタリなグラフィックスドライバは サポートされていません。NVIDIA ドライババージョン 495 以降より、カーネルモード設定 を有効化して sway を --unsupported-gpu 付きで実行すれば、sway は機能します。

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

デフォルトのアプリケーションランチャーは wmenuAUR です。(ただし、デフォルトの設定はまだ dmenu が提供する dmenu_path に依存しています)、デフォルトのターミナルエミュレータfoot です。インストールするか、あるいは設定ファイルで別のアプリケーションに変更するかを、初回起動の前に行なうことが望ましいです。i3 パッケージの Wayland 対応版については、sway wiki の migration guide を参照してください。

sway の起動

Sway を起動する前に、キーボード、マウス、グラフィックカードなどのハードウェアデバイスにアクセスする必要があります。 sd-login(3) で説明されているように、これらのハードウェアデバイスのコレクションはシートと呼ばれます。

Arch Linux では、Sway は次のどちらかを使ってシートにアクセスすることができます。

polkit がすでにシステムにインストールされている場合、Sway は自動的にあなたのシートにアクセスできるはずです。

また、polkit がシステムにインストールされておらず、代わりに seatd を使用したい場合は、seat ユーザーグループに自分を追加し、seatd.service起動/有効化し、再ログインして、以下の方法のいずれかを選択して Sway を起動することができます。

手動

Linux コンソールで sway と入力すれば sway が起動します。

TTY ログイン時に自動起動

X と同様に、Sway はシェル初期化ファイルに以下を追加することで開始できます。(コマンドシェル#ログインシェルを参照):

if [ -z "${WAYLAND_DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
  exec sway
fi

詳細については、xinitrc#ログイン時に X を自動起動 を参照してください。

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

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

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

ディスプレイマネージャを通して、systemd ユーザーサービス として sway を開始することも可能です。

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

設定

i3 を既に使っている場合、i3 の設定を ~/.config/sway/config にコピーすればそのまま動作します。i3 を使ったことがない場合は、サンプル設定ファイルを ~/.config/sway/config にコピーしてください。サンプル設定ファイルは /etc/sway/config にあります。ただし DFALLBACK_CONFIG_DIR フラグが設定されている場合は存在しません。設定方法は sway(5) を見てください。

ノート: ドロップインファイルの設定スニペットを適用するために、ユーザの設定には include /etc/sway/config.d/* が含まれていることが期待されます。sway パッケージは、いくつかの環境変数を systemd ユーザセッションと dbus にインポートする 50-systemd-user.conf ドロップインファイルを提供しています。このドロップインファイルは、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"

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

なお、Sway は起動時に XKB_DEFAULT_LAYOUTXKB_DEFAULT_VARIANT などの環境変数を読み込みますが、環境変数よりも設定ファイルの内容が優先されます。

キーのオートリピート設定

Typematic Delay (オートリピート開始までの時間) と Typematic Rate (1秒間のリピート回数) は、input セクションに以下の行を加えると変更できます。設定項目について詳しくはコンソールでのキーボード設定#typematic delay と rate の調整を参照してください。

~/.config/sway/config
input <identifier> repeat_delay 300
input <identifier> repeat_rate 30

ステータスバー

sway には pure Wayland 環境で動作する swaybar がデフォルトのステータスバーとして同梱されています。swaybar はシェルスクリプトや他のプログラムを呼び出して、ステータスバーに情報を表示することができます。詳細については、sway-bar(5)swaybar-protocol(7) を参照してください。

ヒント: waybar は sway に含まれているバー (swaybar) の代替になります。

i3status のインストールは、 Wayland で実用的なデフォルトのステータスバーを取得するためのオプションです。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

swaybg コマンドの GTK3 フロントエンドとして azoteAUR を使うことができます。

入力デバイス

特定の入力デバイスの設定を調整することができます。例えば、タッチパッドの tap-to-click とナチュナルスクロールを有効にするには、以下の input ブロックを追加:

~/.config/sway/config
input type:touchpad {
    tap enabled
    natural_scroll enabled
}

特定のタッチパッドの設定をセットするには、swaymsg -t get_inputs を使用して、デバイスの Identifier を取得し、type:touchpad の代わりにそれを使用します。

ノート: 上記のコマンドの出力には、"/" などの記号をエスケープするために "\" が付いていることがあります (例: "2:14:ETPS\/2_Elantech_Touchpad")。設定に追加するときはエスケープを取り除いてください。

アクセラレーションなど他のオプションについては sway-input(5) で詳細を確認できます。

グラフィックタブレットをお使いの方は、ペンタブレット#Swayをご覧ください。

HiDPI

設定ファイルの output コマンドでディスプレイのスケールファクタを設定してください。スケールファクタは小数でも指定できます。HiDPI ディスプレイの場合は 2 などに設定してください。

~/.config/sway/config
output <name> scale <factor>

ディスプレイの名前は以下のコマンドで確認できます:

$ swaymsg -t get_outputs

タッチディスプレイのマッピング

マルチディスプレイ環境で使用するタッチディスプレイのタッチ入力のターゲットを、そのタッチディスプレイのみにマッピングすることができます。

~/.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 XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86Search exec $menu

詳細や代替ユーティリティについては、PulseAudio#キーボードのボリュームコントロールAdvanced Linux Sound Architecture#キーボードのボリュームコントロールバックライト#バックライトユーティリティMPRIS を参照してください。

ロック画面がアクティブなときにキーバインドを実行できるようにするには、--locked パラメーターを bindsym に追加します。

bindsym --locked XF86AudioPlay exec playerctl play-pause
ヒント: wevAUR は、Wayland の xorg-xev と同様の機能を提供するツールです。
ノート: systemd は、電源キーやふたの開閉などの特別なキーや、閉じるイベントを処理します。これらは、sway で設定されたものと干渉する可能性があります。systemd での設定方法の詳細については、loginctl(1) および logind.conf(5)} を参照してください。

グラフィカルインジケーターバー

明るさや音量などのパーセント値設定の現在のレベルを、調整時にグラフィカルなバーで表示することが望ましい場合があります。Sway でこの機能を提供する良い選択肢は wobAUR (あるいは wob-gitAUR) です。これは、人気な X ツール xobAUR の機能の一部を提供し、layer-shell プロトコルを実装している Wayland ネイティブなユーティリティです。使用例はプロジェクトのウェブサイトを見てください。

ワークスペースの概要

たくさんのワークスペースをたくさんのウィンドウで使っていて、何がどこにあるかわからなくなったら、sovAUR が便利です。これはすべてのワークスペースのスキーマを表示するオーバーレイで、sway のナビゲーションを容易にします。プログラム名、ウィンドウのタイトルを表示し、マルチ出力のセットアップをサポートします。詳しくは プロジェクトページをご覧ください。

アイドリング

Sway には、アイドルセッションを処理するための専用のアイドル管理デーモン swayidle があります。デーモンを起動してパラメータ化する方法はいくつかあります。最も簡単な方法は、sway 自体の設定を使用することです。swayidle は、timeout (別名 idling)、resume (resume from sleep) 、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秒後にオフにするには、ロックマネージャのプロセスリストを grep し、以下のように swaymsg "output * power off" を実行します。

timeout 10 'if pgrep -x swaylock; then swaymsg "output * dpms off"; fi'

再生中のメディアを一時停止または一時停止する前に画面をロックするには、swayidle コマンドの次の手順を修正します。

before-sleep 'playerctl pause'
before-sleep 'swaylock'
ノート: systemd も sway で設定されたイベントと競合する可能性のあるアイドルイベントを処理します。構成方法の詳細については、loginctl(1) および logind.conf(5) を参照してください。

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

フローティングウィンドウまたはウィンドウの割り当てを有効にするには、アプリケーションを開き、app_idclassinstance、および 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)'

一部のウィンドウで app_id が null になる場合は、class 属性または instance 属性 (あるいはその両方) を使用して、フローティングモード/ウィンドウの割り当てを有効にする必要があります。出力を検索して、ウィンドウの細かいルールを作成できます。

~/.config/sway/config
for_window [app_id="galculator"] floating enable
assign [class="firefox"] -> 3
assign [class="^Urxvt$" instance="^htop$"] -> 9

これは、xorg-xprop を使用して X11class または wm_name 属性を検索するのと似ています。

複数のモニターを使用する場合、フローティングスクラッチパッドウィンドウが大きくなりすぎて、複数のモニターをカバーする可能性があります。このコマンドはフローティングウィンドウを中央に配置し、現在のモニターのサイズの 80% のサイズに変更します。

$ swaymsg move position center; swaymsg resize set 80ppt 80ppt

クリップボード

デフォルトでは、ウィンドウを閉じるとクリップボードは空になります。これは意外なことにデフォルトの動作だったりします。

クリップボードの内容をウィンドウ間で共有するには、 "クリップボードマネージャ" をインストールする必要があります。

Wayland 用に設計されたクリップボードマネージャの一例は、clipmanAUR または clipman-gitAUR からインストールできる clipman です。

Sway で clipman を起動するには、設定ファイルに次の行を追加します。

~/.config/sway/config
exec wl-paste -t text --watch clipman store --no-persist

Xresources

sway で使用するには .Xresources.Xdefaults にコピーしてください。

XWayland

詳細と利用可能なパッケージの概要については、Wayland#Xwayland を参照してください。

XWayland の使用はデフォルトで有効になっています。

一方、XWayland を無効化し、Sway の純粋な Wayland セッションを使うには次のようにします:

~/.config/sway/config
xwayland disable
ノート: プログラムによっては Wayland でネイティブに動作させるために 特殊な環境変数や設定オプション を必要とするものもありますし、Wayland を全くサポートしていないプログラム(ほとんどの独自アプリケーションを含む)もあります。現在のところ、レガシーアプリケーションが使えるようにXWaylandをオンにしておくことが推奨されています。

別の wlroots レンダラーを使用する

環境変数 WLR_RENDERER を指定することにより、別の wlroots レンダラーを使用することができます。利用可能なレンダラーの一覧は、wlroots のドキュメントにあります。vulkan レンダラを使用する場合は vulkan-validation-layers をインストールする必要がある場合があります。さもないと、sway が起動に失敗するかもしれません。

自動起動

i3#自動起動 を参照して、sway の設定ファイル名を調整してください。

ヒントとテクニック

最初に CapsLock/NumLock を有効にする

デフォルトでは、sway は起動時に最初に CapsLockNumLock キーを無効にします。代わりに、起動時にこれらを有効にするには、キーボード入力設定の xkb_capslock または xkb_numlock あるいはその両方を enableに設定します。例えば、すべてのキーボードで有効にするには、sway 設定に次の行を追加します。

~/.config/sway/config
input type:keyboard xkb_capslock enabled
input type:keyboard xkb_numlock enabled

いずれの場合も、キーボードの該当するキーを押すことで CapsLockNumLock を切り替えることができます。

ノート: これらのオプションを有効にすると、sway 設定ファイル Bugzilla 1652820 をリロードしたときに Firefox がクラッシュする可能性があります。

現在のキーボードレイアウト

現在のキーボードレイアウトは、次のようにして取得できます。kbd_identifier は、キーボードの識別子で置き換える必要があります。

$ swaymsg -t get_inputs | jq -r '.[] | select(.identifier == "kbd_identifier") | .xkb_active_layout_name'

コンポーズキー

PrintScreenコンポーズキーとして設定するには、

$ swaymsg 'input * xkb_options compose:prsc'

コンポーズキーの組み合わせは、XCompose ファイルで設定することもできます。この変更を有効にするには、アプリケーションを再起動する必要があります。

/usr/include/X11/keysymdef.h でキーの名前を調べたり、xev(1) のようなデバッガ xkbcli-interactive-wayland(1) (/usr/lib/xkbcommon/フォルダ中) を使ったりすることができます。

バックライト切り替え

ディスプレイの電源をオフ (またはオン) にするには (例:Pause)、次のスクリプトを Sway config でバインドします。

#!/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 オプションを直接使用することもできますが、複数のモニターがある場合は出力を明示的に指定する必要があります。

$ swaymsg "output output_name power toggle"

画面キャプチャと画面共有

こちらを参照 スクリーンショットの取得#Wayland

色温度調整

こちらを参照 バックライト#Wayland.

キーボードを使用して swaynag を制御する

既定の警告/プロンプトプログラムである Swaynag は、sway に付属しており、ユーザーによるマウス操作のみをサポートしています。キーボードショートカットによる対話を有効にするには、swaynagmodeAUR などのヘルパープログラムを使用します。

Swaynag モードは、まず swaynag を起動し、次のボタンの選択、プロンプトの削除、選択したボタンの受け入れなどのアクションをトリガーするシグナルを待機します。これらのシグナルは、制御引数 (swaynagmode--select rightswaynagmode--confirmなど) を指定して swaynagmode スクリプト自体の別のインスタンスを起動することで送信されます。

デフォルトでは、Swaynagmode は初期化時にスウェイモード 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 バージョン1.2以降では、モード名で大文字と小文字が区別されることに注意してください。

swaynagmode を使用するように sway を設定するには、設定コマンド swaynag_command swaynagmode を使用します。

カーソルテーマとカーソルの大きさ

カーソルテーマ やカーソルの大きさを変更するには:

~/.config/sway/config
seat seat0 xcursor_theme my_cursor_theme my_cursor_size

my_cursor_themeDefault, Adwaita, Simple-and-Soft などに置きかえ、my_cursor_size48 などに置きかえます。

echo $XCURSOR_SIZEecho $XCURSOR_THEME でこれらの値を調べることができます。

変更を反映させるにはアプリケーションを再起動してください。

ノート: Wayland ではクライアント側でカーソルテーマが決定されます。アプリケーションが$XCURSOR_SIZE, $XCURSOR_THEME 環境変数を参照しないこともありえます。

systemd で sway 固有のデーモンを管理する

一部のサービス/デーモン (swayidlekansiなど) は、現在のウィンドウマネージャが Sway の場合にのみ開始し、Sway が停止したときにこれらのサービスを停止したい場合があります。これを行うには、sway-session.target を作成し、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 にリンクします。たとえば、kansi (または kansi-gitAUR) サービスを追加するには、次のように入力します。

~/.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 をインストールすることでも行うことができます。sway-systemd はサービスを cgroup に分けるだけでなく、各 GUI アプリケーションを独自の cgroup に配置します。これにより、個々のアプリケーションに対して cgroup 単位のリソース制約を課すことができます。sway-systemd README を参照してください。

起動後の画面解像度の変更

グラフィカルプログラム wdisplaysAUR またはターミナルプログラム wlr-randrAUR を使って、回転、解像度を変更し、ディスプレイを配置します。

ヘッドレス出力の作成

物理的なビデオインターフェイスに関連しない出力を作成する、 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
}

既知の問題

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

ヒント: Sway の wiki には 既知のアプリケーションランチャーのリスト もあります。

i3-dmenu-desktop dmenu、および rofi はすべて Sway では比較的うまく機能しますが、すべて XWayland で実行されており、カーソルをネイティブの Wayland ウィンドウに移動すると応答しなくなるという同じ問題があります。この問題の理由は、Wayland のクライアント/ウィンドウが画面のフォーカスを持っていない限り、入力デバイスにアクセスできないためです。XWayland サーバ自体が Wayland コンポジタのクライアントであるためで、XWayland クライアントの1つは、ユーザ入力にアクセスするためのフォーカスを持っている必要があります。しかし、クライアントの1つがフォーカスを取得すると、入力を収集し、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 の問題 を参照)

また、plasma-workspace パッケージが提供する krunner バイナリもランチャーとして機能し、XWayland とネイティブ Wayland の両方をサポートします。

rofi-lbonn-wayland-gitAURrofi の派生形で、Wayland で動作します。また、X11 セッションで起動する必要がある場合は -x11 フラグがあります。

wofi はコマンド・ランチャーで、rofi と同じ機能の一部を提供します、wofi には、SSH モードやウィンドウ切り替えモードなど、rofi の機能の一部が欠けています。これは wlroutes ライブラリに基づいており、レンダリングには GTK3 を使用していて、sway にはとてもよく効きます。

仮想環境で使う

Sway は VirtualBoxVMware ESXi の両方で動作します。

QEMU で Sway を機能させるには、-vga qxl で QEMU を開始する必要があります。 QEMU#qxlも参照してください。

Sway を tty から起動できない

3D アクセラレーションを有効にする必要があります。VMware#Intel と Optimus で 3D グラフィックを有効化 を参照してください。

マウスカーソルが表示されない

特定のグラフィックスドライバー(VMSVGA グラフィックコントローラーやのプロプライエタリ NVIDIA ドライバーなど)を使うとカーソルが表示されません。これは、[2] で説明されているようにソフトウェアカーソルを使用して修正できます。

$ export WLR_NO_HARDWARE_CURSORS=1

Sway Socket Not Detected

swaymsg -t get_outputs などの swaymsg 引数を使用すると、次のメッセージが返されることがあります。

sway socket not detected.
ERROR: Unable to connect to

ターミナルマルチプレクサ (GNU Screentmux など) 内で実行される場合。これは、swaymsgSWAYSOCK で提供されたソケットに接続できなかったことを意味します。

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-resurrecttmux-continuum で以前の tmux セッションに再アタッチしたり、sway の起動前に tmux サーバを起動すると、環境変数は、古くなっています。

update-environment を使って、セッションにアタッチするたびにそれらを更新するように tmux に指示するには、以下を .tmux.conf に追加してください。

set-option -g update-environment "DISPLAY WAYLAND_DISPLAY SWAYSOCK SSH_AUTH_SOCK"

Unable to retrieve socket path

tty から swaymsg -t を実行すると、

Unable to retrieve socket path

というメッセージが表示されます。これは SWAYLOCK 環境変数が Sway 起動後に設定されるためで、swaymsg は Sway 内のターミナルで実行してください。

キー割り当てとキーボードレイアウト

デフォルトでは、複数のキーボードレイアウト input * xkb_layout "us,ru" を使用している場合、セカンダリレイアウトを切り替えたときにバインディングが壊れることがあります。

https://github.com/swaywm/sway/pull/3058, のおかげで、以下のように --to-code 行に --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 ベースのアプリケーション (IntelliJ、CLion、PyCharm などの JetBrains エディタ) を開くと、空白の画面が表示されます。これを軽減するには、_JAVA_AWT_WM_NONREPARENTING 環境変数を1に設定してアプリケーションを起動します。

rofidmenu などのランチャーからアプリケーションを起動する場合は、 デスクトップエントリ#環境変数の修正 に示すように、アプリケーションのデスクトップエントリを変更してください。

Java アプリケーションに関するいくつかの問題は、OpenJDK11 および Sway 1.5 で修正されました。ただし、一部のアプリケーションでは、新しいバージョンの OpenJDK を使用するために追加の構成が必要です。Android Studio の場合は、STUDIO_JDK=/usr/lib/jvm/java-11-openjdk/ を設定する必要があります。 [3]

ボーダーでスクロール

アプリケーションのボーダー上でマウスのスクロールホイールを使用するとクラッシュする場合は、app_id (例:Firefox) に border none を設定してください。

Program cannot open display

起動時に Program cannot open display というエラーメッセージが表示されてプログラムがクラッシュする場合は、使用しているプログラムが X11 プログラムである可能性があります。XWayland 互換性レイヤを使って Wayland で X11 プログラムを実行することができます。詳細は Sway#Xwayland を参照してください。

Unable to open wayland socket

sway が起動せず、"Unable to open wayland socket" というエラーメッセージが出力される場合は、`$XDG_RUNTIME_DIR` 環境変数が設定されているが、指定したディレクトリがないことを意味する場合があります。

WINE アプリケーションでマウスが動作しない

プログラムを実行するとき、WINE はプライマリーモニターが設定されていることを期待しますが、Wayland にはプライマリーモニターの概念がないため、(クリックが認識されないなど) 問題を引き起こす可能性があります。代わりに、Sway の設定にこの行を追加することで、xrandr を介して XWayland が使用するプライマリモニタを指定することができます。

~/.config/sway/config
...
exec_always xrandr --output XWAYLAND0 --primary
...

For this to work your display position offset needs to be 0,0 because of a bug [4] in sway. XWAYLAND0 (または任意の XWAYLAND ディスプレイ名) はあなたのモニターを表していない可能性があり、異なるセッションで変更される可能性があります。代わりに、次の行を使用して最初の XWAYLAND ディスプレイを指定することができます。:

exec_always xrandr --output $(xrandr | grep -m 1 XWAYLAND | awk '{print $1;}') --primary

これらの行は、あなたのニーズに合わせて調整する必要があるかもしれません。どのディスプレイがどの名前にマッピングされているかは、引数なしで xrandr コマンドを使用することで確認できます。

ノート: XWayland は、新しく接続されたモニターを(電源を切って再び入れたものも含めて)まったく新しいディスプレイとして認識します。もしこれが "プライマリーモニター" に起こった場合、それはもはやプライマリーとはみなされていません。

参照

翻訳ステータス: このページは en:Sway の翻訳バージョンです。最後の翻訳日は 2023/4/11 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。