プロジェクト

全般

プロフィール

機能 #427

完了
NO NO

atri の Wayland への移行

機能 #427: atri の Wayland への移行

nop_thread さんがほぼ2年前に追加. 21日前に更新.

ステータス:
終了
優先度:
通常
担当者:
開始日:
期日:
進捗率:

100%

一時中断:
いいえ
pinned:
いいえ
リマインド予定日:
前回確認日:
2026/05/11
管理外残件あり:
いいえ

説明

いい加減やるぞ

NO nop_thread さんがほぼ2年前に更新 操作 #1

  • 前回確認日2024/07/14 にセット

夏休みあたりに試したい。

NO nop_thread さんが1年以上前に更新 操作 #2

  • リマインド予定日 を削除 (2024/07/28)
  • 前回確認日2024/07/14 から 2024/09/01 に変更
  • 管理外残件ありいいえ にセット

何もしてない。虚無。

NO nop_thread さんが1年以上前に更新 操作 #3

  • 優先度低め から 低:暇なとき に変更

NO nop_thread さんが1年以上前に更新 操作 #4

  • 前回確認日2024/09/01 から 2024/10/15 に変更

NO nop_thread さんが11ヶ月前に更新 操作 #5

  • 前回確認日2024/10/15 から 2025/06/22 に変更

ちょっと試してみたが、 fcitx5 がうまく動いている感じがしない。
保留。

NO nop_thread さんが11ヶ月前に更新 操作 #6

  • ステータス新規 から 進行中 に変更

$WAYLAND_DISPLAY$DISPLAY が sway 起動後にセットされるから、 sway より前に systemctl --user import-environment WAYLAND_DISPLAY DISPLAY しても駄目というのがミソだった。
これをちゃんと設定したら systemd の user unit の諸々 (fcitx5 含む) が意図したとおり動作するようになった。

なお $LANG 等は sway 起動より前に設定して export しておく方が良さそう。

NO nop_thread さんが11ヶ月前に更新 · 編集済み 操作 #7

残件:

  • マウスの感度調整 (トラックボールのカーソル移動が爆速すぎる)
  • マウスのボタンリマップ
    • トラックボールの Fn2 と Fn3 を middle click にしたい。
    • Xorg の設定では Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 10 2 2" としてある。
  • トラックボールのホイールエミュレーション
    • Fn2 (ボタン11) をクリックしながらボールを転がすと二次元のスクロールになる機能。
  • アプリランチャー, tmux ランチャー
    • rofi が X 用なので wofi か何かで置き換える。
  • git で署名できるか確認
    • pinentry の動きが怪しかった。

トラックボールは Xorg の設定で以下のような設定にしている。
USB と Bluetooth の両方で同じ設定が使えるように重複させているが、内容は同じ。

Section "InputClass"
	Identifier "Elecom USB Trackball Wheel Emulation"
	MatchVendor "ELECOM"
	MatchProduct "DEFT Pro"
	MatchIsPointer "yes"
	Driver "evdev"
	Option "EmulateWheel" "true"
	# 1: Left button
	# 2: Middle button (wheel click)
	# 3: Right button
	# 8: Back
	# 9: Forward
	# 10: Fn1
	# 11: Fn2
	# 12: Fn3
	Option "EmulateWheelButton" "11"
	Option "Emulate3Buttons" "false"
	Option "XAxisMapping" "6 7"
	Option "YAxisMapping" "4 5"
	# 11 -> 2: Use Fn2 as wheel click
	# 12 -> 2: Use Fn3 as wheel click
	Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 10 2 2"
EndSection

Section "InputClass"
	Identifier "Elecom Bluetooth Trackball Wheel Emulation"
	MatchProduct "DEFT Pro TrackBall"
	MatchIsPointer "yes"
	Driver "evdev"
	Option "EmulateWheel" "true"
	# 1: Left button
	# 2: Middle button (wheel click)
	# 3: Right button
	# 8: Back
	# 9: Forward
	# 10: Fn1
	# 11: Fn2
	# 12: Fn3
	Option "EmulateWheelButton" "11"
	Option "Emulate3Buttons" "false"
	Option "XAxisMapping" "6 7"
	Option "YAxisMapping" "4 5"
	# 11 -> 2: Use Fn2 as wheel click
	# 12 -> 2: Use Fn3 as wheel click
	Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 10 2 2"
EndSection

これを Wayland で動くようにしたいが、どうも sway では大したことはできなそう (しかもボタンリマップはバグがあるらしい) ので、特定の Wayland プロトコルを受け付ける何らかのデーモンを自前で書くとかになりそう。
というか sway-input(5) でも「Deprecated: use the virtual-pointer Wayland protocol instead.」と言われておりあまり期待できないので、たぶん下手に sway での問題解決を試みるよりも自前で書く方が確実。

NO nop_thread さんが11ヶ月前に更新 操作 #8

どうせ daemon を書くなら TourBox とかもどうにかできたら夢があるな。

NO nop_thread さんが6ヶ月前に更新 · 編集済み 操作 #9

  • 前回確認日2025/06/22 から 2025/12/09 に変更

NO nop_thread さんが4ヶ月前に更新 操作 #10

  • 一時中断いいえ から はい に変更

NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #11

  • 優先度低:暇なとき から 通常 に変更
  • 一時中断はい から いいえ に変更
  • 前回確認日2025/12/09 から 2026/04/23 に変更

マウス感度調整

nop_thread さんは #note-7 で書きました:

  • マウスの感度調整 (トラックボールのカーソル移動が爆速すぎる)

調整できた。

input $device_deft_pro {
    accel_profile "adaptive"
    pointer_accel -0.85
}

Fn2 の middle click 化とスクロールボタン化

nop_thread さんは #note-7 で書きました:

  • マウスのボタンリマップ
    • トラックボールの Fn2 と Fn3 を middle click にしたい。
    • Xorg の設定では Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 10 2 2" としてある。
  • トラックボールのホイールエミュレーション
    • Fn2 (ボタン11) をクリックしながらボールを転がすと二次元のスクロールになる機能。

できた。

まず、 /etc/udev/hwdb.d/50-elecom-trackball.hwdb のようなものを用意して Fn2 (sway 的には BTN_BACK だが今回それは関係なく、 hwdb 的には KEYBOARD_KEY_90007) を btn_middle にする。

# /etc/udev/hwdb.d/50-elecom-trackball.hwdb
# `ELECOM TrackBall Mouse DEFT Pro TrackBall Mouse`
#
# Use `evtest` command to get the key code (e.g., 90007).
#
# Map the Fn2 button (90007) to the middle button.
evdev:name:ELECOM TrackBall Mouse DEFT Pro TrackBall Mouse:*
 KEYBOARD_KEY_90007=btn_middle

次に、 sway 側では リマップ後の キーを scroll button に設定する。

input $device_deft_pro {
    scroll_method on_button_down
    # ```
    # # /etc/udev/hwdb.d/50-elecom-trackball.hwdb (as of 2026-04-23)
    # # /etc/udev/hwdb.d/50-elecom-trackball.hwdb (as of 2026-05-16)
    # # `ELECOM TrackBall Mouse DEFT Pro TrackBall Mouse`
    # #
    # # Use `evtest` command to get the key code (e.g., 90007).
    # #
    # # Map the Fn2 button (90007) to the middle button.
    # evdev:name:ELECOM TrackBall Mouse DEFT Pro TrackBall Mouse:*
    #  KEYBOARD_KEY_90007=btn_middle
    # ```
    #
    # Fn2 is BTN_BACK (278) (according to `libinput debug-events` command), but
    # the button to specify here is the logical button after remapped. Physical
    # Fn2 (BTN_BACK) is now logical middle button (BTN_MIDDLE).
    scroll_button BTN_MIDDLE
    #scroll_factor 1.0

    accel_profile "adaptive"
    pointer_accel -0.85
}

これで普通にホールド時はスクロールになってクリック時はミドルクリックになる。

ただし X での設定と異なり Fn2 ボタンをミドルボタンにしてしまうので、「本物の」ミドルクリックをしながらドラッグなどはできない。
hwdb でなく sway 側で何かすれば (たとえば sway の設定で物理 Fn3 を論理 middle にマップすれば)) 「スクロールボタンとしては機能しないミドルボタン」を作れないだろうかとも思ったが、 sway-input: add button_mapping option · Issue #3960 · swaywm/sway を見た感じ、そもそもボタンマッピングの機能自体が sway になさそうなのでこの方針では駄目そう。

scroll_factor でスクロール速度も調整できそうだが、今のところデフォルト (たぶん 1.0) で困っていない。

ランチャー

nop_thread さんは #note-7 で書きました:

  • アプリランチャー, tmux ランチャー
    • rofi が X 用なので wofi か何かで置き換える。

どうも rofi 2.0.0 (2025-09-02 リリース) で Wayland サポートが入ったらしい (cf. Release 2.0.0 · davatorium/rofi · GitHub)。
何もしていないが普通に使えるようになっていた。

pinentry

nop_thread さんは #note-7 で書きました:

  • git で署名できるか確認
    • pinentry の動きが怪しかった。

あとで確認する。

NO nop_thread さんが約1ヶ月前に更新 操作 #12

pinentry

nop_thread さんは #note-7 で書きました:

  • git で署名できるか確認
    • pinentry の動きが怪しかった。
$ git commit
error: gpg failed to sign the data:
[GNUPG:] KEY_CONSIDERED <REDACTED> 0
[GNUPG:] BEGIN_SIGNING H10
[GNUPG:] PINENTRY_LAUNCHED 82516 gnome3:curses 1.3.2-unknown - tmux-256color :0 - 1000/1000 0
gpg: 署名に失敗しました: デバイスに対する不適切なioctlです
[GNUPG:] FAILURE sign <REDACTED>
gpg: signing failed: デバイスに対する不適切なioctlです
$

pinentry-gnome3 でこんな感じのエラーが出ていた。
結論としては、 dbus-update-activation-environment WAYLAND_DISPLAY すると解決することがわかった。
sway の設定などでこれを exec しておけば良さそうか。

NO nop_thread さんが約1ヶ月前に更新 操作 #13

  • 進捗率0 から 80 に変更
  • 前回確認日2026/04/23 から 2026/04/24 に変更

既に Wayland で生活できるくらいの状態になっている。

残件:

  • スクリーンキャプチャ
    • 詳細未確認だが、どうもうまく動いていない。
    • せめて画像くらいは残せるようにしておかないと困る。
  • マウスカーソル
    • もうちょっと大きくしたい。
  • 切り替え可能なマルチモニタ設定
    • スクリプトでも組んでしまうのが楽だろう。

NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #14

nop_thread さんは #note-13 で書きました:

  • マウスカーソル
    • もうちょっと大きくしたい。

普通に sway 側に機能があった。

seat seat0 xcursor_theme Adwaita 24

seat0 決め打ちで良いのかは調べていない。
multi-seat はわざわざ使おうとしなければ使われない類のもののような雰囲気があるので、一旦は気にしなくていいか。

NO nop_thread さんが約1ヶ月前に更新 操作 #15

そういえば gtk 側で theme を勝手に作って C-h や C-u などのショートカットをテキスト入力で使えるようにしていたが、これは何故か使えなくなっている。
gtk のレイヤーの話なら Wayland がどうとかは関係ない気がするのだが……。

とはいえ最近非 Linux 環境でも不自由なくやっていけるようキーボード側 (UHK) のマッピングでどうにかすることを模索していたので、これらのショートカットの利用をやめる良い機会だと思って放置している。

NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #16

nop_thread さんは #note-13 で書きました:

  • スクリーンキャプチャ
    • 詳細未確認だが、どうもうまく動いていない。
    • せめて画像くらいは残せるようにしておかないと困る。

sway の config を確認したところ scrot を使っていた。 Wayland 非対応らしい。
slurp, grim あたりを使うのが一般的らしいので、そのうち移行する。

NO nop_thread さんが約1ヶ月前に更新 操作 #17

grim を試しているが、論理解像度でキャプチャされているようで fractional scaling 環境だと画像が滲む。
困るなぁ。
slurp が返してくる座標情報がそもそも論理解像度なので、 scaling まわりはもうちょっと慎重に調整しないといけないかもしれない。

NO nop_thread さんが約1ヶ月前に更新 操作 #18

nop_thread さんは #note-7 で書きました:

  • マウスの感度調整 (トラックボールのカーソル移動が爆速すぎる)

カーソル移動が遅すぎるのはスケールなしのネイティブ解像度でそこそこ丁度良いスピードが標準だからかもしれない。
scale 1.5scale 2 をやめてみたところ、 #note-11pointer_accel -0.85 ではカーソルが遅すぎた。

NO nop_thread さんが約1ヶ月前に更新 操作 #19

  • 前回確認日2026/04/24 から 2026/04/26 に変更

nop_thread さんは #note-17 で書きました:

grim を試しているが、論理解像度でキャプチャされているようで fractional scaling 環境だと画像が滲む。
困るなぁ。
slurp が返してくる座標情報がそもそも論理解像度なので、 scaling まわりはもうちょっと慎重に調整しないといけないかもしれない。

滲まないようにするパッチがあったが最新リリースの v1.5.0 だと当たらなくなっていたため、移植した。
これで全画面キャプチャなら滲まなくなる (少なくとも全モニタの scale が一致している場合については表示されているとおりの画像が手に入る) はず。

A patch on grim-1.5.0 (the next commit of it in fact, i.e., 07eb6914ceb2931894670875fabda3c65014d5b8) to fix blurry image when scaling is applied.

実験した限りだとジオメトリを指定したキャプチャでは出力画像が強制的に論理解像度になっていそうな雰囲気があったが (詳細未確認)、これについては grim を直せない場合でも全画面キャプチャしておいて後からトリミングすれば良いので、やりようはある。

NO nop_thread さんが約1ヶ月前に更新 · 編集済み 操作 #20

  • 進捗率80 から 90 に変更

nop_thread さんは #note-19 で書きました:

実験した限りだとジオメトリを指定したキャプチャでは出力画像が強制的に論理解像度になっていそうな雰囲気があったが (詳細未確認)、これについては grim を直せない場合でも全画面キャプチャしておいて後からトリミングすれば良いので、やりようはある。

よくわからないが、部分的な領域のキャプチャであってもちゃんと物理解像度の画像を出してくれていそうなので、素直に使えばよさそう。やったね!

NO nop_thread さんが約1ヶ月前に更新 操作 #21

  • 前回確認日2026/04/26 から 2026/04/27 に変更

モニタレイアウトの切り替えスクリプトを用意した。

残件はスクリーンショットまわりのみ。

NO nop_thread さんが27日前に更新 · 編集済み 操作 #22

  • 前回確認日2026/04/27 から 2026/05/05 に変更

スクリーンショットのバリエーション:

  • full: デスクトップ全体
  • focused monitor: フォーカスのあるモニタ
  • focused window: フォーカスのあるウィンドウ
  • selected window: 選択されたウィンドウ
  • rectangle: 選択された矩形領域

時間:

  • 即時
  • 3秒くらい待つ

NO nop_thread さんが22日前に更新 操作 #23

nop_thread さんは #note-22 で書きました:

スクリーンショットのバリエーション:

  • full: デスクトップ全体
  • focused monitor: フォーカスのあるモニタ
  • focused window: フォーカスのあるウィンドウ
  • selected window: 選択されたウィンドウ
  • rectangle: 選択された矩形領域

時間:

  • 即時
  • 3秒くらい待つ

ゲームやライブ配信の視聴などをしないので、ウィンドウ選択にかかる時間すら惜しむような状況は基本的に atri では発生しない。
tiling WM である都合から非アクティブなウィンドウが別ウィンドウに隠されていがちだったりもしないので、非アクティブウィンドウを選択肢から排除して特別に何か考えるという状況も案外発生しない。
そういうわけで、即時で発動できるショートカットが full / selected window / rectangle の3種類くらいあればおそらく十分で (これでも多いくらいだろう)、他は全部 rofi のようなものでまとめて選択させれば良さそう。

NO nop_thread さんが21日前に更新 操作 #24

  • ステータス進行中 から 終了 に変更
  • 進捗率90 から 100 に変更
  • 前回確認日2026/05/05 から 2026/05/11 に変更

他の形式にエクスポート: PDF Atom