グローバルキー入力を検出する方法

グローバルキー入力を検出する方法

私はすべてのソフトウェアを実行するように設定できる特別なキーを持つAsusノートブックを持っています(少なくともWindowsでは)。

一般的な質問は次のとおりです。キー押下を(グローバルに)検出するには?

それでは、ユーザーがこのキーを押すことをどのように検出できますか?

答え1

私は通常、xevスキャンコードを使用してキーを押すことを決定し、それを使用したいアクションにマッピングします。xdoツールまたはXBindキー

シフ

$ xev | grep -A2 --line-buffered '^KeyRelease' \
    | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

上記のxevコマンドを実行すると、小さな白いウィンドウが表示されます。このウィンドウの上にマウスを置き、疑問符キーを押す必要があります。各キーを押すたびに、キー名を端末に表示する必要があります。

スクリーンショット

                   xevダイアログのss

便利なアイテムへのキーマッピング

たとえば、を使用してコマンドを実行するショートカットキーの組み合わせを生成できますxbindkeys。正常に使用しましたXBindキーGNOME 3.8.4はこの目的のために設計されています。

あまり使用されていませんが、特定のディレクトリが開かれたときにNautilusが実行されるキーボードショートカットを作成するのが好きです。

はい

xbindkeysまず、パッケージがインストールされていることを確認する必要があります。

その後、テンプレート設定ファイルを生成するには、次のコマンドを一度だけ実行する必要がありますxbindkeys

$ xbindkeys --defaults > /home/saml/.xbindkeysrc

ファイルを作成したら、テキストエディタでファイルを開き、次の規則を追加できます。

"nautilus --browser /home/saml/projects/path/to/some/dir"
  Mod4+shift + q

上記のように変更したら、それを終了してxbindkeys(すでに実行している場合)再起動する必要があります。

$ killall xbindkeys
$ xbindkeys

Mod+ Shift+を入力するたびにQNautilusが開き、そのフォルダが開きます。

GNOMEキーボードアプレットの使用

設定に合格すると(環境設定鍵盤、選ぶショートカットタブをクリックし、ブラウザに新しいカスタムショートカットを追加します。

   SS#1

図の手順1〜5を使用して、コマンドを特殊キーにマップすることもできます。

答え2

テストしたばかりのさまざまなツールの概要を投稿したいと思いました。

私はインターネット検索から始めました。Linuxでどのキーが押されたかを確認してください、次の位置に移動します。閉じているかトピックから外れたため、ここに要約を投稿するのが最も論理的な選択です。

  1. [閉じる: 余談]https://superuser.com/questions/248517/show-keys-pressed-in-linux
  2. [閉じる:重複]https://askubuntu.com/questions/1197651/ubuntu-show-what-keys-are-pressed-in-real-time
    1. ["オリジナル"、重複しない質問]https://askubuntu.com/questions/30466/how-can-i-display-keyboard-shortcuts-as-i-press-them
  3. この質問はここにあります。

以下は、各場所に対する最高の答えをまとめたものです。この情報が必要です。したがって、次のことができます。

  1. 発生したばかりの停止キー押下を検出し、
  2. HIDキーボード マイクロコントローラ装置の作業をしています。デバイスを販売してから時々作業しています。

キー入力を検出するさまざまな方法の概要

Linux Ubuntu 20.04でテストされました。

  1. screenkey

    # Install it
    sudo apt update 
    sudo apt install screenkey
    
    # run it
    screenkey
    # it now displays a massive black bar at the bottom of your main monitor
    # whenever you press any key, showing all keys as they are pressed!
    
    # kill it
    
    # first, find its PID
    ps aux | grep screenkey
    # Sample output:
    #       $ ps aux | grep screenkey
    #       gabriel   215523  2.9  0.3 972900 59364 ?        Rl   10:27   0:00 /usr/bin/python3 /usr/bin/screenkey
    #       gabriel   215635  0.0  0.0   9040  2388 pts/0    S+   10:27   0:00 grep --color=auto screenkey
    # OR
    pgrep screenkey
    # Sample output:
    #       $ pgrep screenkey
    #       215523
    
    # now, kill that PID; ex:
    kill 215523
    

    このツールについて最初に知ったところは次のとおりです。https://askubuntu.com/a/30468/327339

  2. sudo showkey

    # show numeric keycode key presses and releases (use Ctrl + C to exit)
    sudo showkey
    
    # show hex scancodes (use Ctrl + C to exit)
    sudo showkey -s 
    
    # show ASCII keycodes, including the actual letter or character pressed,
    # which is the most human-readable (use `Ctrl + D` to exit, NOT `Ctrl + C`!)
    sudo showkey -a
    

    源泉:

    1. https://superuser.com/a/248568/425838
      1. 答えの下の私の結論は次のとおりです。https://superuser.com/questions/248517/show-keys-pressed-in-linux#comment2606625_248568
  3. https://www.keyboardtester.com/。ブラウザでキーストロークをテストするか、キーが押されていることを確認してください。このツールについて最初に知ったところは次のとおりです。https://askubuntu.com/a/1197656/327339

  4. xev。使い終わったら、それを終了する2つのステップがあります。

    1. 現在のターミナルウィンドウの外側をクリックすると、ターミナルウィンドウがフォーカスを失います。
    2. ターミナルウィンドウに戻り、Ctrl+を押しますC

    源泉:

    1. このツールについて最初に知ったところは次のとおりです。https://askubuntu.com/a/1198027/327339
    2. また見なさい:グローバルキー入力を検出する方法
  5. sudo evtest- 非常に低いレベルのツールがUSB HIDデバイスの操作に必要なようです(私の考えには素晴らしいです)。

    # Install it
    sudo apt update 
    sudo apt install evtest 
    
    # Run it
    
    # First, find your keyboard /dev/input/event number manually 
    sudo evtest  
    # Then, press Ctrl + C to kill it after it prints out all the events; you 
    # do NOT need to "Select the device event number" as it requests. Just hit
    # Ctrl + C.
    # Let's assume ours is "/dev/input/event4".
    
    # now, run the grab command with the above event number path
    sudo su -c 'sleep 1; timeout -k5 10 evtest --grab /dev/input/event4'
    
    # OR, if you know that `sudo evtest` only shows one output line with the
    # word "keyboard" in it, you can script the above two steps with this one
    # cmd like this. Notice that you can get a list of all input devices with 
    # `cat /proc/bus/input/devices`, as is done at the start of this cmd:
    input_event_num="$(cat /proc/bus/input/devices \
    | grep -B 1 -A 10 -i "keyboard" | awk 'NR==6 {print $4}')"; \
    path_to_keyboard="/dev/input/$input_event_num"; \
    sudo su -c "sleep 1; timeout -k5 10 evtest --grab $path_to_keyboard"
    

    源泉:

    1. https://askubuntu.com/a/1197742/327339
      1. この回答の下のコメントも参照してください。

その他の参考資料:

  1. awk助ける:https://unix.stackexchange.com/a/89641/114401
  2. どこで学びましたかcat /proc/bus/input/deviceshttps://stackoverflow.com/a/15052092/4561887

答え3

どのキーボードキーが機能していないかわからない場合は、次のものを使用できます。Keyboardtester.org

使いやすいです。

関連情報