黒い画面から、わが家へ:Dell XPS 13 で Sway を動かすまで
i3 から Sway に乗り換え、新しいセッションに初めてログインしたら、黒い画面とぽつんとしたカーソルだけ。その虚無が、私の愛するデスクトップになるまでの記録。
Fedora 43 の Dell XPS 13 で i3 から Sway に乗り換え、新しいセッションに初めてログインすると、出迎えてくれたのは……何もなし。黒い画面と、ぽつんとしたマウスカーソルだけ。
最初に思ったのは「やった、もう壊した」。だが散々掘り下げたあとの二つめの考えは、ずっと面白いものだった。これは、その黒い画面が本当に気に入って使うデスクトップになるまでの物語だ。
黒い画面は壊れていなかった——空だっただけ
診断 · 空のワークスペース「全部入り」のデスクトップから来ると誰も教えてくれないこと。壁紙のない空の Sway ワークスペースは、ただ真っ黒だ。クラッシュではない。それが既定なのだ。
設定がさらに事態を悪くしていた。~/.config/sway/config は i3-config-wizard が生成したもの——つまり実体は i3 設定で、Sway がそれを丁寧に互換モードで動かしていた。壁紙も設定せず、ウィンドウも自動起動しない。「これ動いてる?」のパニックは、二行で大きく和らいだ——ログイン時に壁紙、ログイン時に端末:
output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill exec foot

ここの他のどの修正よりも長く生き延びた頑固な点が一つ。ログインで降り立つワークスペース 1 は、これでもなお黒いままだった。肩をすくめ、Super+2 を事実上のわが家にして、リストを進めた。これを覚えておいてほしい。
クリックできないトレイ
修正 · swaybar → waybarトレイのアイコン——WiFi、Bluetooth、Dropbox、Remmina——は出ているのに、クリックしても何も起きない。犯人は内蔵の swaybar。トレイ自体は正しく抱えるが、そのコンテキストメニューは悪名高く不安定で、しばしばまったく描画されない。
本当の解決はバーの差し替えだった。swaybar を、メニューをちゃんと描画する waybar に替えた。Sway 設定では、いっそ拍子抜けするほど簡単だ:
bar {
swaybar_command waybar
}小さな ~/.config/waybar/config を書いたあと——ワークスペース、時計、トレイ、ネットワーク、Bluetooth、音量、バッテリー——私に逆らわないバーが手に入った。
バーは嘘をついた(いや、ついていない?)
診断 · 数字を信じよwaybar を立ち上げると、二つの数字がおかしく見えた。音量が 3359% と出ていた。表示バグだと思った。違った。PipeWire はソフトウェアゲインを本当にフル音量の三十倍超まで暴走させていた。音量アップキーが上限なしで延々と 5% を足し続けていたからだ。リセットし、キーに -l 1.0 のシートベルトで上限をかけた:
bindsym XF86AudioRaiseVolume exec wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+
古いバーは 70% だと言い張っていたのに、バッテリーは 100% と出ていた。これは厄介だ。バッテリーは満充電だった。古い表示は、充電量をバッテリーの本来の設計容量に対して測っていた——つまりあの「70%」は、実はバッテリーの健康度だった。セルは消耗している。直すものはない。ただ今は理解できる数字、それだけだ。
ステータスバーを信じよ。3359% と言ったとき、それは本当に 3359% だった。
X11 の亡霊を一掃する
修正 · Wayland ネイティブへ深く掘るほど、意味を持つには Xorg が要る i3 時代の設定の残骸が見つかった。最悪の元凶は画面ロック。設定は xss-lock と i3lock を呼んでいたが、どちらも X11 専用。Wayland では何もせず——サスペンドや蓋を閉じてもラップトップはまったくロックされていなかった。ネイティブな解決:
exec swayidle -w \
timeout 300 'swaylock -f -c 000000' \
timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
before-sleep 'swaylock -f -c 000000'次に小さな亡霊たち。ランチャーは X11 の dmenu(→ ネイティブの wmenu-run)、ログアウトの確認は i3-nagbar と i3-msg(→ swaynag と swaymsg exit)。一つずつ、すべてを Wayland ネイティブにした。
使い心地の総ざらい
構築 · 足りなかったもの土台が固まると、足りないものを探しに出た。ここで「動く」が「私のもの」に変わった。
- スクリーンショット。 grim + slurp + wl-copy はすでに入っていた。Print(画面全体をファイルへ)と Shift+Print(範囲選択してクリップボードへ)に割り当てるだけ。
- 輝度キー。 brightnessctl をラップトップの輝度キーに割り当てた。後から思えば当然。
- 通知。 通知デーモンが一つもなく、何も——低バッテリー警告すら——見えていなかった。mako を入れて自動起動にした。
- ナイトライト。 redshift が自動起動して静かに失敗していた——X11 のガンマプロトコルしか話せないからだ。画面をネイティブに暖める wlsunset に切り替えた(座標を渡した——ベルリン)。
- クリップボード履歴。 clipman を入れた(cliphist の Fedora 向け代替)。クリップボードを監視し、Super+h に割り当て。
- 電源管理。 dnf は power-profiles-daemon を拒否した——Fedora 43 が既に同梱する tuned-ppd と衝突する。代わりに tuned を有効化し、tuned-adm profile balanced でプロファイルを切り替える。結果は同じ、無駄な手間は少ない。
最後の二つの小さな痛み
修正 · 既定値を読め端末を foot に替えた(軽くて Wayland ネイティブ)ところ、画面がスケール 2.0 なのにフォントが極小だとすぐ文句を言った。また HiDPI のせいにする気満々だった。違う。foot は既定 8pt のフォントで来るのに、私は設定を何も与えていなかった。一行の foot.ini:
font=monospace:size=12
そしてクリップボード選択——Super+h——は項目を横に、一つずつ、「まだある」と告げる小さな > を添えて表示していた。履歴が空だと思った。違った。wmenu は既定で横一列なのだ。-l 10 を足すと、直近十件のまっとうな縦リストになった。
行き着いた先
状態 · Wayland ネイティブ
ついに完全に Wayland ネイティブで、完全に私のものになった Sway デスクトップを走らせる Dell XPS 13:
- ちゃんと現れ、ちゃんと振る舞う壁紙とバー
- 本当にクリックできるトレイ
- 私を聴覚障害にしない音量と、理解できるバッテリー表示
- 離席すると自分でロックするラップトップ
- スクリーンショット、輝度、通知、ナイトライト、クリップボード履歴、電源プロファイル——すべて動作
- 私の目が同意したフォントサイズの端末
過去の自分に言いたいこと
- Sway の黒い画面はたいてい空のワークスペースで、クラッシュではない——だが思い込まず、確かめよ。 マウスを動かし、キーバインドを叩け。他は普通なのに一つのワークスペースだけ頑固に黒いなら、swaymsg -t get_tree を実行して本当に見ろ。
- 生成された i3 設定は Sway でたいてい動く。そしてそれこそが罠だ。 「たいてい」は、静かに失敗する X11 専用の残骸の山——ロック、ランチャー、ダイアログ——を隠す。すべてをネイティブにする午後を確保せよ。
- ステータスバーを信じよ。 3359% と言ったとき、それは本当に 3359% だった。
- 強引に押し通す前に、パッケージの衝突を読め。 --allowerasing に手を伸ばしていたら、tuned-ppd 対 power-profiles-daemon の衝突で動く電源スタックを失っていたかもしれない。
- HiDPI での極小フォントは、たいていアプリの既定であって、スケーリングのせいではない。 コンポジターを責める前に、アプリの設定を見よ。
黒い画面は、一度も空ではなかった
解決 · ワークスペース 1覚えておいてと言ったあの考えを覚えているだろうか。すべてのあとでもなお黒いワークスペース 1。あれは一度も空ではなかった。一番最初の黒い画面——マシンを壊したと思わせ、ここまでずっと Super+2 で避けてきたあの画面——は、最初からウィンドウだった。私がただ一度も見なかっただけだ。
ついにワークスペース 1 で swaymsg -t get_tree を実行すると、そこにあった。私の foot 端末と、意識して開いた覚えのない二つめのウィンドウ——はぐれた Xwayland Video Bridge。画面共有する X11 アプリが頼る補助で、ログイン時に自動起動し、本来は見えない 1×1 ピクセルのはず。ところが実体ウィンドウとしてマップされ、全画面になっていた。初回起動以来ワークスペース 1 に居座る、本物の、不透明な黒い四角。exec foot がその下でずっと忠実に起動していた端末の真上に。
for_window [class="xwaylandvideobridge"] floating enable, resize set 1 1, move position 0 0, border none, move to scratchpad no_focus [class="xwaylandvideobridge"]
たった一つのウィンドウルールが、ついにブリッジを地面に打ちつける——フロートさせ、1 ピクセルに縮め、枠を外し、スクラッチパッドへ放り込む。Super+1 はいま私の端末を開く。この記事の最初の問題は、私が最後に解いた問題だった。Sway の黒い画面はたいてい空のワークスペース——だが「たいてい」を信じるな。swaymsg -t get_tree を実行して、本当に見ろ。
時に虚無は、こちらを見つめ返すウィンドウだ。