Wayland Automation
Wayland環境(niri compositor)でのGUI自動化パターン集。
環境確認
# Wayland環境であることを確認
echo $WAYLAND_DISPLAY # -> wayland-1 等
# niriが動作していることを確認
pgrep niri
スクリーンショット
基本
# 画面全体(Claude Code用)
screenshot-for-claude
# -> /tmp/claude-screenshot.png
# 画面全体(カスタムパス)
grim /path/to/screenshot.png
# 特定のモニター
grim -o DP-6 output.png
grim -o eDP-1 laptop.png
領域選択(slurp必要)
# インタラクティブに領域選択
grim -g "$(slurp)" region.png
# 座標指定
grim -g "100,100 500x300" region.png
連続撮影
# 1秒ごとに5枚
for i in {1..5}; do
grim "/tmp/shot_$i.png"
sleep 1
done
テキスト入力(wtype)
基本入力
# 単純なテキスト
wtype "Hello World"
# 日本語(IME経由ではない直接入力)
wtype "こんにちは"
# 複数行(\nは使えない、Enterキーを使う)
wtype "Line 1" && wtype -k Return && wtype "Line 2"
特殊キー
# 単一キー
wtype -k Return # Enter
wtype -k Tab # Tab
wtype -k Escape # Escape
wtype -k BackSpace # Backspace
wtype -k Delete # Delete
wtype -k space # Space
# ファンクションキー
wtype -k F1
wtype -k F12
# 矢印キー
wtype -k Up
wtype -k Down
wtype -k Left
wtype -k Right
# その他
wtype -k Home
wtype -k End
wtype -k Page_Up
wtype -k Page_Down
モディファイア付き
# Ctrl + キー
wtype -M ctrl -k c # Ctrl+C(コピー)
wtype -M ctrl -k v # Ctrl+V(ペースト)
wtype -M ctrl -k a # Ctrl+A(全選択)
wtype -M ctrl -k s # Ctrl+S(保存)
wtype -M ctrl -k z # Ctrl+Z(アンドゥ)
# Alt + キー
wtype -M alt -k Tab # Alt+Tab
wtype -M alt -k F4 # Alt+F4(閉じる)
# Shift + キー
wtype -M shift -k Tab # Shift+Tab
# Super(Mod)キー
wtype -M logo -k d # Super+D(ランチャー等)
# 複合
wtype -M ctrl -M shift -k t # Ctrl+Shift+T
タイミング制御
# 遅延付き入力(ミリ秒)
wtype -d 50 "slow typing" # 50ms間隔
# 操作間の待機
wtype "first" && sleep 0.5 && wtype "second"
クリップボード(wl-clipboard)
コピー
# テキストをコピー
echo "text to copy" | wl-copy
# ファイル内容をコピー
wl-copy < file.txt
# 画像をコピー
wl-copy --type image/png < image.png
# 現在の選択をコピー(primary selection)
wl-copy --primary "text"
ペースト
# テキストをペースト
wl-paste
# 特定のMIMEタイプ
wl-paste --type text/plain
wl-paste --type image/png > image.png
# クリップボードの内容を確認
wl-paste --list-types
クリップボード監視
# クリップボード変更時に実行
wl-paste --watch echo "Clipboard changed"
niri操作
ウィンドウ操作(niri msg)
# アクティブウィンドウ情報
niri msg focused-window
# ワークスペース一覧
niri msg workspaces
# ワークスペース切り替え
niri msg action focus-workspace 2
# ウィンドウを閉じる
niri msg action close-window
キーバインド経由
# アプリランチャー起動(Mod+D)
wtype -M logo -k d
# ターミナル起動(Mod+Return)
wtype -M logo -k Return
# ウィンドウを閉じる(Mod+Q)
wtype -M logo -k q
# フルスクリーン(Mod+F)
wtype -M logo -k f
実践パターン
パターン1: アプリ起動して操作
# 1. ランチャー起動
wtype -M logo -k d
sleep 0.5
# 2. アプリ名入力
wtype "firefox"
sleep 0.3
# 3. 起動
wtype -k Return
sleep 2
# 4. 確認
screenshot-for-claude
パターン2: フォーム入力
# フィールド間をTabで移動しながら入力
wtype "username"
wtype -k Tab
wtype "password"
wtype -k Tab
wtype -k Return # 送信
パターン3: テキスト編集
# 全選択してコピー
wtype -M ctrl -k a
sleep 0.1
wtype -M ctrl -k c
# 内容を取得
content=$(wl-paste)
echo "$content"
# 編集して戻す
echo "$content (edited)" | wl-copy
wtype -M ctrl -k v
パターン4: 設定変更サイクル
# waybar設定変更の例
edit_waybar() {
# 1. 現状確認
screenshot-for-claude
# 2. 設定編集(外部で実行)
# Edit ~/.config/waybar/config
# 3. リロード
pkill waybar
sleep 0.5
waybar &
sleep 1
# 4. 結果確認
screenshot-for-claude
}
トラブルシューティング
wtype が動作しない
# 環境変数確認
echo $WAYLAND_DISPLAY
echo $XDG_RUNTIME_DIR
# 権限確認
ls -la $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY
スクリーンショットが黒い
# grim が正しいseatにアクセスできているか
grim -l # 利用可能な出力一覧
クリップボードが動作しない
# wl-clipboard が Wayland に接続できているか
wl-paste --list-types
日本語入力
# fcitx5 経由での入力はwtypeでは直接サポートされない
# 代わりにクリップボード経由で入力
echo "日本語テキスト" | wl-copy
wtype -M ctrl -k v