web-dev-qa-db-ja.com

Linuxでテンキーを失うことなく、マウスキーをキーボードキーとしてマップする方法

マウスのクリックをマッピングする方法を知っています F1、 F2 そして F3 (それぞれ左クリック、中クリック、右クリック):

xkbset m   # required, but disable keypad
xmodmap -e "keycode 67 = Pointer_Button1 Pointer_Button1"
xmodmap -e "keycode 68 = Pointer_Button2"
xmodmap -e "keycode 69 = Pointer_Button3"

しかし、これにはxkbset mslow keys モードを使用:

押すと 4 キーパッドから、カーソルを左に移動します。この機能は必要ありません。上のマッピングだけです。

私はxdotoolでそれを理解しようとしましたが、押されたキー/離されたキー(ドラッグ&ドロップ用)を使用して、

xdotool mousedown 1
xdotool mouseup 1

どうすればこのモードを使用できませんか、またはすべてのキーパッドキーを再マップできますか?

キーパッドからの数値および算術記号はどうですか?

別の解決策はありますか?

詳細については、Debian(シナモン)とArchlinux(xfce)に必要であり、可能であれば、ウィンドウマネージャーに基づいていないソリューションが必要です。

編集:

試してみた この解決策 だが、ドラッグアンドドロップできない F1

~/.xbindkeysrc

"xdotool mousedown 1"
    F1
"xdotool mouseup 1"
    F1 + Release

または:

"xdotool mousedown 1"
    m:0x10 + c:67
"xdotool mouseup 1"
    m:0x10 + c:67 + Release

次に:

xset -r 67

EDIT2

actkbd で試した

# actkbd configuration file
<keycode ("67")> :key : :xdotool mousedown 1
<keycode ("67")> :rel : :xdotool mouseup 1

シガーなし:/

こちら から転載

5

W00T!

まず、スクリプトを作成しますclick

#!/bin/bash

id=$(
    xinput list |
        awk '/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\1", "1")}'
)
xdotool mousedown $1
while IFS= read -r event; do
    if [[ $event == *release* ]]; then
        xdotool mouseup $1
        exit
    fi
done < <(xinput test $id)

次に、ウィンドウマネージャーとマップに新しいキーボードショートカットを追加します。 F1 走る /path/to/mouse <1|3>(左[〜#〜]または[〜#〜]右クリック)。

Etvoilà;)

これはxbindkeysで実行でき、WMに依存しません。

編集:

これがarchlinux + xfce 4.12では機能しない理由はわかりませんが、Debian9 + Cinnamonでは機能します

編集:

このソリューションはよりうまく機能します:

.bashrc

xmodmap -e "keycode 67 = Pointer_Button1 Pointer_Button1"
xmodmap -e "keycode 68 = Pointer_Button2"
xmodmap -e "keycode 69 = Pointer_Button3"

キーボードショートカットとして:

#!/bin/bash

id=$(
    xinput list |
        awk '/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\1", "1")}'
)


(
    while read event; do
        if [[ $event == *release* ]]; then
            xkbset -m
            exit
        fi
    done < <(xinput test $id)
) &
xkbset m
4

.xbindkeysrcでこのコマンドを使用して「マウストグル」アクションを実装できます(最初の編集にはタイプミスがあり、.xbindkeysではありません)。

"if [ ! -e /tmp/mouse_token ] ; then touch /tmp/mouse_token ; xdotool mousedown 1 ; else rm -f /tmp/mouse_token ; xdotool mouseup 1 ; fi"
some_key

空のファイル/tmp/mouse_tokenを作成して、マウスボタンの状態を追跡します。 some_keyの場合はF1を使用できます。つまり、シングルクリックするには2回押すか、別のキーを使用する必要があります(例:F4)。

注:私のシステムでは、不明な理由により、Fキーのプレスイベントがxbindkeysバインディングをトリガーせず、リリースイベントのみがトリガーされます。同じことが同じ場合は、release+F1の代わりにsome_keyを使用してください。

注2:デフォルトではxbindkeysNumLockをチェックしないため、rcファイルでm:0x10を設定しなかった場合は、keystate_numlock = enable修飾子を削除できます。

0
L. Levrel