web-dev-qa-db-ja.com

キーを押すときのマウスクリックをシミュレートします

Homeキーが押されているときにマウスの左下ボタンを、Homeキーが離されているときにマウスの左ボタンをエミュレートしようとしています。

その背後にある理由は、タッチパッドのボタンがひどく、ハイライト(コピー)テキストにマウスの左クリックでトラックポイント(赤い乳首)を使用するのが好きだからです。タッチパッドのボタンを使用する代わりに、「ホーム」キーを使用します。マウスダウン部分をエミュレートすることはできますが、「Home」キーが放されたときにクリックを放す方法がわかりません。

ここに私が持っているものがあります。最初にxbindkeysツールを使用します。このエントリを.xbindkeysrcに追加しました。

"~/bin/mouse-click"
  m:0x0 + c:110

マウスクリックは次のbashスクリプトです。

#!/bin/bash
xdotool mousedown 1

問題は、クリックがリリースされないことであるため、「ホーム」のリリースを検出する方法を見つける必要があります。これが私が書き込もうとしているスクリプトです。コメントは、私がやろうとしていることを説明しています。

#!/bin/bash

# not sure how to do that:
exit if Home key is in a pressed state (to avoid more mousedown actions)

xdotool mousedown 1

# not sure how to do that: (if Home key is released, release the mouse click)
while xinput query-state <device name> | grep -Flq 'key[9]=up'
xdotool mouseup 1

それが私が理解しようとしていることです:

  1. 「ホーム」キーの状態を照会します(押されたかどうか)。
  2. キーボードイベントを聞いて、「ホーム」キーのリリースを検出します。

それを達成するためのより良いアプローチがあれば、私はそれらについて聞きたいです。ありがとう!

編集:ソリューションは1行です:xmodmap -e "keycode 115 = Pointer_Button2"
これで、私のホームキーは左クリックを実行し、マウスクリックを打ったかのように動作し、キーを押したままにして、期待どおりにハイライト(コピー)できます。

また、Endキーを中央クリックにマッピングしました。これを使用して貼り付けます:xmodmap -e "keycode 110 = Pointer_Button1"

6
user3538541

解決策は

xmodmap -e "keycode 115 = Pointer_Button2"

今、私のホームキーは左クリックを行っており、マウスクリックを打ったかのように動作し、キーを押したままにして、期待どおりにハイライト(コピー)できます。

また、Endキーを中クリックにマッピングしたため、これを使用して貼り付けることができます。

xmodmap -e "keycode 110 = Pointer_Button1"

これを機能させるには、「マウスキー」(テンキーを使用したマウスエミュレーション)を有効にする必要があることに注意してください。 「マウスキー」を押すと切り替えられます Shift+NumLock または、次を実行して明示的に設定します。

dconf write /org/gnome/desktop/a11y/keyboard/mousekeys-enable true
dconf write /org/gnome/desktop/a11y/keyboard/mousekeys-enable false
2
user3538541

ほとんどのデスクトップには、XFCEの[すべての設定]-> [アクセシビリティ]-> [マウス]-> [マウスエミュレーション]のように、キーボードが既に組み込まれているマウスを制御するアクセシビリティ設定があります。あなたがやろうとしていること。

私が思い出すと、gnome、cinnamon、mateには「アクセシビリティ」や支援技術などのような機能があります。 t xfceで動作するようにします)。

または、タッチパッドがまだ正常に機能する場合(ボタンだけではない)、シングルクリックでタップし、タップしてからクリックしてドラッグし、ダブルタップ=ダブルクリックすることができます...動作しないようにするには、ターミナルに1行か2行ある必要があります(すぐに覚えてはいけません)。動作する他のオプションがいくつかある場合、自分のスクリプトを書きたくない

1
Xen2050