「Sway」の版間の差分
(→systemd を使用した sway 固有のデーモンの管理: セクション名を修正) |
(→グラフィカルインジケーターバー: 訳を修正) |
||
(2人の利用者による、間の9版が非表示) | |||
10行目: | 10行目: | ||
sway ('''S'''irCmpwn's '''Way'''land compositor [https://github.com/swaywm/sway/blob/f0ddf6d74c98ba6c502783b8f41be859c56712c9/README.md] から派生) は [[i3]] と互換性を持つように設計された [[Wayland]] コンポジタです。[http://swaywm.org 公式ウェブサイト] より: |
sway ('''S'''irCmpwn's '''Way'''land compositor [https://github.com/swaywm/sway/blob/f0ddf6d74c98ba6c502783b8f41be859c56712c9/README.md] から派生) は [[i3]] と互換性を持つように設計された [[Wayland]] コンポジタです。[http://swaywm.org 公式ウェブサイト] より: |
||
:Sway はタイリング Wayland コンポジタであり、X11 の i3 ウィンドウマネージャの代替品です。既存の i3 設定で動作し、i3 の機能に加えて、いくつかの追加機能をサポートしています。 |
:Sway はタイリング Wayland コンポジタであり、X11 の i3 ウィンドウマネージャの代替品です。既存の i3 設定で動作し、i3 の機能に加えて、いくつかの追加機能をサポートしています。 |
||
+ | |||
+ | 見た目に興味がある場合は、Sway のフォークとして {{AUR|swayfx}} が存在します。 |
||
== インストール == |
== インストール == |
||
190行目: | 192行目: | ||
==== グラフィカルインジケーターバー ==== |
==== グラフィカルインジケーターバー ==== |
||
− | 明るさや音量などのパーセント値設定の現在のレベルを、調整時にグラフィ |
+ | 明るさや音量などのパーセント値設定の現在のレベルを、調整時にグラフィカルなバーで表示することが望ましい場合があります。Sway でこの機能を提供する良い選択肢は {{AUR|wob}} (あるいは {{AUR|wob-git}}) です。これは、人気な X ツール {{AUR|xob}} の機能の一部を提供し、layer-shell プロトコルを実装している Wayland ネイティブなユーティリティです。使用例は[https://github.com/francma/wob プロジェクトのウェブサイト]を見てください。 |
==== ワークスペースの概要 ==== |
==== ワークスペースの概要 ==== |
||
259行目: | 261行目: | ||
{{hc|~/.config/sway/config|2= |
{{hc|~/.config/sway/config|2= |
||
− | exec wl-paste -t text --watch clipman store |
+ | exec wl-paste -t text --watch clipman store --no-persist |
}} |
}} |
||
275行目: | 277行目: | ||
xwayland disable |
xwayland disable |
||
}} |
}} |
||
− | {{Note|プログラムによっては Wayland でネイティブに動作させるために [[Wayland#GUI ライブラリ|特殊な環境変数や設定オプション]] を必要とするものもありますし、Wayland を全くサポートしていないプログラム |
+ | {{Note|プログラムによっては Wayland でネイティブに動作させるために [[Wayland#GUI ライブラリ|特殊な環境変数や設定オプション]] を必要とするものもありますし、Wayland を全くサポートしていないプログラム(ほとんどの独自アプリケーションを含む)もあります。現在のところ、レガシーアプリケーションが使えるようにXWaylandをオンにしておくことが推奨されています。}} |
=== 別の wlroots レンダラーを使用する === |
=== 別の wlroots レンダラーを使用する === |
||
− | 環境変数 {{ic|WLR_RENDERER}} を指定することにより、別の [https://gitlab.freedesktop.org/wlroots/wlroots/-/tree/master/render wlroots |
+ | 環境変数 {{ic|WLR_RENDERER}} を指定することにより、別の [https://gitlab.freedesktop.org/wlroots/wlroots/-/tree/master/render wlroots レンダラー]を使用することができます。利用可能なレンダラーの一覧は、[https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/master/docs/env_vars.md wlroots のドキュメント]にあります。{{ic|vulkan}} レンダラを使用する場合は {{Pkg|vulkan-validation-layers}} をインストールする必要がある場合があります。さもないと、sway が起動に失敗するかもしれません。 |
+ | |||
+ | === 自動起動 === |
||
+ | |||
+ | [[i3#自動起動]] を参照して、sway の設定ファイル名を調整してください。 |
||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
467行目: | 473行目: | ||
i3-dmenu-desktop {{Pkg|dmenu}}、および {{Pkg|rofi}} はすべて Sway では比較的うまく機能しますが、すべて XWayland で実行されており、カーソルをネイティブの Wayland ウィンドウに移動すると応答しなくなるという同じ問題があります。この問題の理由は、Wayland のクライアント/ウィンドウが画面のフォーカスを持っていない限り、入力デバイスにアクセスできないためです。XWayland サーバ自体が Wayland コンポジタのクライアントであるためで、XWayland クライアントの1つは、ユーザ入力にアクセスするためのフォーカスを持っている必要があります。しかし、クライアントの1つがフォーカスを取得すると、入力を収集し、X11 プロトコルを介してすべての XWayland クライアントが利用できるようにします。そのため、XWayland のウィンドウにカーソルを移動して Esc キーを押すと問題が解決し、{{ic|pkill}} を実行しても問題が解決する場合があります。 |
i3-dmenu-desktop {{Pkg|dmenu}}、および {{Pkg|rofi}} はすべて Sway では比較的うまく機能しますが、すべて XWayland で実行されており、カーソルをネイティブの Wayland ウィンドウに移動すると応答しなくなるという同じ問題があります。この問題の理由は、Wayland のクライアント/ウィンドウが画面のフォーカスを持っていない限り、入力デバイスにアクセスできないためです。XWayland サーバ自体が Wayland コンポジタのクライアントであるためで、XWayland クライアントの1つは、ユーザ入力にアクセスするためのフォーカスを持っている必要があります。しかし、クライアントの1つがフォーカスを取得すると、入力を収集し、X11 プロトコルを介してすべての XWayland クライアントが利用できるようにします。そのため、XWayland のウィンドウにカーソルを移動して Esc キーを押すと問題が解決し、{{ic|pkill}} を実行しても問題が解決する場合があります。 |
||
− | {Pkg|bemenu}}はWaylandのdmenuをネイティブに置き換えたものです。どちらもオプションで {{Pkg|j4-dmenu-desktop}} と組み合わせることで、デスクトップファイルを起動するための Wayland ネイティブな組み合わせを提供できます (i3-dmenu-desktop がそうであるように)。例えば |
+ | {{Pkg|bemenu}} は Wayland の dmenu をネイティブに置き換えたものです。どちらもオプションで {{Pkg|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' |
j4-dmenu-desktop --dmenu='bemenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite' |
||
479行目: | 485行目: | ||
{{AUR|rofi-lbonn-wayland-git}} は {{Pkg|rofi}} の派生形で、Wayland で動作します。また、X11 セッションで起動する必要がある場合は {{ic|-x11}} フラグがあります。 |
{{AUR|rofi-lbonn-wayland-git}} は {{Pkg|rofi}} の派生形で、Wayland で動作します。また、X11 セッションで起動する必要がある場合は {{ic|-x11}} フラグがあります。 |
||
− | {{Pkg|wofi}} はコマンド・ランチャーで、rofi と同じ機能の一部を提供します、wofi には、SSH モードやウィンドウ切り替えモードなど、rofi の機能の一部が欠けています。これは {{Pkg|wlroutes}} ライブラリに基づいており、レンダリングには GTK3 を使用していて、 |
+ | {{Pkg|wofi}} はコマンド・ランチャーで、rofi と同じ機能の一部を提供します、wofi には、SSH モードやウィンドウ切り替えモードなど、rofi の機能の一部が欠けています。これは {{Pkg|wlroutes}} ライブラリに基づいており、レンダリングには GTK3 を使用していて、sway にはとてもよく効きます。 |
=== 仮想環境で使う === |
=== 仮想環境で使う === |
||
499行目: | 505行目: | ||
=== Sway Socket Not Detected === |
=== Sway Socket Not Detected === |
||
− | + | {{ic|swaymsg -t get_outputs}} などの {{ic|swaymsg}} 引数を使用すると、次のメッセージが返されることがあります。 |
|
+ | |||
sway socket not detected. |
sway socket not detected. |
||
ERROR: Unable to connect to |
ERROR: Unable to connect to |
||
+ | |||
− | これは {{ic|swaymsg}} が {{ic|SWAYSOCK}} のソケットに接続できないことを意味しています。 |
||
+ | ターミナルマルチプレクサ ([[GNU Screen]] や [[tmux]] など) 内で実行される場合。これは、{{ic|swaymsg}} が {{ic|SWAYSOCK}} で提供されたソケットに接続できなかったことを意味します。 |
||
{{ic|SWAYSOCK}} の現在の値を確認するには: |
{{ic|SWAYSOCK}} の現在の値を確認するには: |
||
+ | |||
{{hc|$ env {{!}} grep -F "SWAYSOCK"|2= |
{{hc|$ env {{!}} grep -F "SWAYSOCK"|2= |
||
− | + | SWAYSOCK=/run/user/1000/sway-ipc.1000.4981.sock |
|
+ | }} |
||
+ | |||
+ | この問題を回避するには、実行中の sway プロセスに基づいてソケットにアタッチしてみてください。 |
||
+ | $ export SWAYSOCK=/run/user/$(id -u)/sway-ipc.$(id -u).$(pgrep -x sway).sock |
||
− | 最初の sway ソケットにアタッチしてみて、コマンドを再実行してみてください: |
||
− | $ export SWAYSOCK=$(ls /run/user/*/sway-ipc.*.sock | head -n 1) |
||
上記のエラーを解決するには、マルチプレクサの外でコマンドを実行する必要があります。 |
上記のエラーを解決するには、マルチプレクサの外でコマンドを実行する必要があります。 |
||
− | === |
+ | === Wayland サーバーへの接続に失敗する === |
− | Tmux はセッションごとにローカルな環境変数を作成します( |
+ | Tmux はセッションごとにローカルな環境変数を作成します (確認するには {{ic|tmux show-environment}} と入力) そのため、[https://github.com/tmux-plugins/tmux-resurrect tmux-resurrect] や [https://github.com/tmux-plugins/tmux-continuum tmux-continuum] で以前の tmux セッションに再アタッチしたり、sway の起動前に tmux サーバを起動すると、環境変数は、古くなっています。 |
{{ic|update-environment}} を使って、セッションにアタッチするたびにそれらを更新するように tmux に指示するには、以下を {{ic|.tmux.conf}} に追加してください。 |
{{ic|update-environment}} を使って、セッションにアタッチするたびにそれらを更新するように tmux に指示するには、以下を {{ic|.tmux.conf}} に追加してください。 |
||
529行目: | 540行目: | ||
=== キー割り当てとキーボードレイアウト === |
=== キー割り当てとキーボードレイアウト === |
||
− | デフォルトでは、複数のキーボードレイアウト {{ic|<nowiki>input * xkb_layout "us,ru"</nowiki>} を使用している場合、セカンダリレイアウトを切り替えたときにバインディングが壊れることがあります。 |
+ | デフォルトでは、複数のキーボードレイアウト {{ic|<nowiki>input * xkb_layout "us,ru"</nowiki>}} を使用している場合、セカンダリレイアウトを切り替えたときにバインディングが壊れることがあります。 |
https://github.com/swaywm/sway/pull/3058, のおかげで、以下のように {{ic|--to-code}} 行に {{ic|--to-code}}キーを追加するだけで済みます。 |
https://github.com/swaywm/sway/pull/3058, のおかげで、以下のように {{ic|--to-code}} 行に {{ic|--to-code}}キーを追加するだけで済みます。 |
2023年10月3日 (火) 15:17時点における版
関連記事
sway (SirCmpwn's Wayland compositor [1] から派生) は i3 と互換性を持つように設計された Wayland コンポジタです。公式ウェブサイト より:
- Sway はタイリング Wayland コンポジタであり、X11 の i3 ウィンドウマネージャの代替品です。既存の i3 設定で動作し、i3 の機能に加えて、いくつかの追加機能をサポートしています。
見た目に興味がある場合は、Sway のフォークとして swayfxAUR が存在します。
目次
- 1 インストール
- 2 sway の起動
- 3 設定
- 4 ヒントとテクニック
- 5 既知の問題
- 6 参照
インストール
sway は sway パッケージでインストールできます。最新の開発版は sway-gitAUR でインストールできます。sway は wlroots に緻密に依存しているので、sway 更新時には wlroots も更新するのが望ましいです。
また、画面をロックする swaylock や、アイドル時間管理デーモンの swayidle もインストールできます。
デフォルトのアプリケーションランチャーは wmenuAUR です。(ただし、デフォルトの設定はまだ dmenu が提供する dmenu_path に依存しています)、デフォルトのターミナルエミュレータ は foot です。インストールするか、あるいは設定ファイルで別のアプリケーションに変更するかを、初回起動の前に行なうことが望ましいです。i3 パッケージの Wayland 対応版については、sway wiki の migration guide を参照してください。
sway の起動
Sway を起動する前に、キーボード、マウス、グラフィックカードなどのハードウェアデバイスにアクセスする必要があります。 sd-login(3) で説明されているように、これらのハードウェアデバイスのコレクションはシートと呼ばれます。
Arch Linux では、Sway は次のどちらかを使ってシートにアクセスすることができます。
- systemd-logind(8) と polkit または
- seatd これは、wlroots の依存関係として 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 のセッションは /usr/share/wayland-sessions/sway.desktop
にあります。GDM や SDDM などのディスプレイマネージャは自動的にセッションを認識します。
ディスプレイマネージャを通して、systemd ユーザーサービス として sway を開始することも可能です。
あるいは、テキストベースのセッションマネージャを使うこともできます。ディスプレイマネージャ#コンソールを参照してください。
設定
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-input(5) および xkeyboard-config(7) を参照してください。
なお、Sway は起動時に XKB_DEFAULT_LAYOUT
や XKB_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) を参照してください。
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
の代わりにそれを使用します。
アクセラレーションなど他のオプションについては 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
グラフィカルインジケーターバー
明るさや音量などのパーセント値設定の現在のレベルを、調整時にグラフィカルなバーで表示することが望ましい場合があります。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'
フローティングウィンドウ
フローティングウィンドウまたはウィンドウの割り当てを有効にするには、アプリケーションを開き、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)'
一部のウィンドウで 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 を使用して X11 の class
または 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
別の wlroots レンダラーを使用する
環境変数 WLR_RENDERER
を指定することにより、別の wlroots レンダラーを使用することができます。利用可能なレンダラーの一覧は、wlroots のドキュメントにあります。vulkan
レンダラを使用する場合は vulkan-validation-layers をインストールする必要がある場合があります。さもないと、sway が起動に失敗するかもしれません。
自動起動
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'
コンポーズキー
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 right
や swaynagmode--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_theme
は Default
, Adwaita
, Simple-and-Soft
などに置きかえ、my_cursor_size
は 48
などに置きかえます。
echo $XCURSOR_SIZE
と echo $XCURSOR_THEME
でこれらの値を調べることができます。
変更を反映させるにはアプリケーションを再起動してください。
systemd で sway 固有のデーモンを管理する
一部のサービス/デーモン (swayidle や kansiなど) は、現在のウィンドウマネージャが 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 }
既知の問題
アプリケーションランチャー
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-gitAUR は rofi の派生形で、Wayland で動作します。また、X11 セッションで起動する必要がある場合は -x11
フラグがあります。
wofi はコマンド・ランチャーで、rofi と同じ機能の一部を提供します、wofi には、SSH モードやウィンドウ切り替えモードなど、rofi の機能の一部が欠けています。これは wlroutes ライブラリに基づいており、レンダリングには GTK3 を使用していて、sway にはとてもよく効きます。
仮想環境で使う
Sway は VirtualBox や VMware 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 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 セッションに再アタッチしたり、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に設定してアプリケーションを起動します。
rofi や dmenu などのランチャーからアプリケーションを起動する場合は、 デスクトップエントリ#環境変数の修正 に示すように、アプリケーションのデスクトップエントリを変更してください。
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
コマンドを使用することで確認できます。