キーボード入力をシミュレートして、クリップボードの内容を許可しないアプリケーション(リモートKVMなど)に「貼り付け」できるようにします。今、私はxdotool
とxclip
を使用しようとしています:
xdotool type "$(xclip -o)"
このコマンドは、私がターミナルウィンドウにいて、自分でそのコマンドを入力すると機能します。コマンドを実行すると、クリップボードの内容が入力されます。私の目標は、このコマンドをホットキーにバインドして、どのアプリケーションでも機能するようにすることです。
このホットキーを使用すると、フォーカスがあるウィンドウに対して予期しない動作が発生します。例えばターミナルウィンドウのサイズが縮小します(実際には多少面白いです)。スクリプトとして保存してスクリプトを呼び出すか、sh -c
でコマンドをカプセル化すると、同様の結果が発生します。強力なxdotool type
コマンドを実際に使用するにはどうすればよいですか?
このコマンドには2つの問題があります。 1つ目は、コマンドを実行しようとするときにバインディング内のメタキーが押されないようにする必要があることです。次に、デフォルトでxclipはXA_Primary
ではなくXA_CLIPBOARD
バッファーを選択します。したがって、xclipの選択パラメーターとしてclipboard
を渡す必要があります。ホットキーコマンドを次のように変更します。
sh -c 'sleep 0.5; xdotool type "$(xclip -o -selection clipboard)"'
xdotoolはキー押下を作成し、Ctrlキーをリリースしません...最も簡単な解決策は、遅延を追加することですegsleep 0.5
で0.5秒待ってからCtrlを十分な速さで離してください。
sh -c 'xdotool type --clearmodifiers-"$(xclip -o -selection clipboard)"'
「--clearmodifiers」はCTRL/ALT/Shiftなどを削除します。スリープが必要ないことを願っています
"-"は、xdotoolオプションの終わりを意味するため、貼り付けられたテストが-doで始まる場合、xdotoolはそれをオプションとして解釈しようとしません。
実際には、Ctrl+V
(クリップボードのコピーと貼り付け)とShift+Insert
(マウスマークと中クリックの貼り付け)でアクセスできる2つのバッファーがあります。
クリップボードを共有するために適切に接続されたセッションがある場合、2つのうちの1つは自動的に動作するはずです。