JavaScriptを有効にしてください

Waylandでクリップボードの内容を自動タイピング

 ·  ☕ 2 分で読めます

なぜ必要?

X11の場合はxdotoolという便利なツールがあり、それを用いて自動入力等を実現することができていました。
これはリモート環境を操作しているときなどに有用です。
リッチなリモートデスクトップ環境だとクリップボードの内容を自動入力するような機能がデフォルトで実装されており便利ですが、ハイパーバイザーのコンソールを開いているときなど、自動入力の機能もクリップボードも実装されておらずいちいち手入力している人をよく見かけます。
このようなときに、自動で入力してくれるスクリプトをキーバインドとして割り当てておくと便利です。

使うツール

Waylandではxdotoolは使えないので、代わりにydotoolというものを使います。
これはWayland用のツールというわけではなく、uinputを用いた入力自動化の実装です。
これは公式のREADMEにも書いてあります:

You can use it on anything as long as it accepts keyboard/mouse/whatever input.

また、クリップボードの内容の読み取りにwl-clipboardというツールを使います。

Arch Linuxでは双方共にExtraレポジトリから入手できます。

注意

キーボードレイアウトの都合により記号等が正しく入力されない場合があります。
そのような場合は、ydotoolが利用する仮想入力デバイスのキーボードレイアウトを強制的にusキーボードとしてください。

例えば、筆者の使っているhyprlandの設定ファイルでは、以下のようにします。

device:ydotoold-virtual-device {
    kb_layout=us
}

事前準備

  1. gpasswd -a $(whoami) inputのようにしてユーザーをinputグループに追加します。
  2. systemctl --user enable --now ydotoolでydotoolのデーモンを開始しておきます。

スクリプト

wl-pasteコマンドで読み取ったクリップボードの中身をydotoolに渡せば良いので、以下のようになります。

1
ydotool type '$(wl-paste -n)'

クオーテーションを忘れると入力結果が崩壊することがあるので気をつけましょう。

キーバインド

以上のようなスクリプトがキーバインド一発ですぐに呼び出せるようにしておくと仕事が捗ることがあります。
例えば、hyprlandでは以下のように設定します。

bind=SUPER_SHIFT,V,exec,sh -c "sleep 0.3 && ydotool type '$(wl-paste -n)'"

sleepの時間やキーバインド等、細かいところはお好みでどうぞ。

共有

hayabusa2yk
著者
hayabusa2yk
Dev/Admin of servers