web-dev-qa-db-ja.com

numlockを無効にし、マウスボタンのキーバインディングを保持します

Numlockキーを無効にする(テンキー番号が常に機能するようにキーを何もしない)と同時に、追加のマウスボタン(マウスの側面にある)をショートカットにマッピングしてカスタムアクションを実行するのに問題があります。

Arch LinuxとXfceを使用しており、ログインマネージャーはLightDMです。

私はこのコードを使用してbashファイルに入れ、起動時にnumlockを無効にします。

xmodmap -e "keycode 77 = NoSymbol"

そして、ホームディレクトリに.xbindkeysrcファイルがあります。

"xdotool key ctrl+w"
 b:8 + Release

"xdotool key ctrl+d"
 b:9 + Release

(タブとブックマークを閉じる)

起動時に「Numlockを無効にする」コードを有効にすると、.xbindkeysrcファイルは無効になります。これは、xmodmapコマンド(その前)と同じbashファイルにあるコマンドnumlockx onに関連しているようです。どうすれば解決できますか?

追加する

"NoCommand"
 c:77

to .xbindkeysrcにも、望ましい効果はありません。 Numlockは理論的には修飾キーであるため、cをmに変更しても役に立ちません。 c:77の代わりにNum_Lockを使用することも機能しません。

5
Smile4ever

何が起こっているのか、そしてなぜあなたのアイデアがうまくいかないのかについての説明から始めましょう。まず、モディファイアマップを見てください。

$ xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

ご覧のとおり、ここではNum_Lockmod2です。オンの場合、すべてのキー押下イベントはmod2ビットがオンになっています。

このように無効にすると:

$ xmodmap -e "keycode 77 = NoSymbol"
$ xmodmap 
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        BadKey (0x4d)
mod3      
mod4        Super_L (0x85),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

mod2BadKeyに関連付けられていることに注意してください。これは、Xorgを大いに混乱させるようです。実際、モディファイアマップの変更のほとんどは、私にとってX11を壊しているようです。


現在、モディファイアマップで遊ぶことを含む良い解決策を見つけることができません。しかし、私には別の考えがあります。すべてのキーパッドキーをマップして、numlockをオンとオフの両方で同じように機能させることができます。あれは:

xmodmap -e "keysym KP_Up = KP_8"
xmodmap -e "keysym KP_Left = KP_4"
# ...

これを行うと、numlockの状態は重要ではなくなります。

後でモディファイアを削除して、LEDの切り替えをオフにすることもできます。

xmodmap -e "remove mod2 = Num_Lock"
4
Michał Górny

@MichałGórnyの回答に基づいています。 num-lockを無効にし、とにかく数値を使用し、numlockをF13にマップするコマンドは次のとおりです(ウィンドウマネージャーの特別な関数にバインドすると便利な場合があります)

# NumLock is F13
xmodmap -e "remove mod2 = Num_Lock" \
        -e "keycode 77 = F13"

# Use numbers even when numlock is off
xmodmap -e "keysym KP_End = KP_1" \
        -e "keysym KP_Down = KP_2" \
        -e "keysym KP_Next = KP_3" \
        -e "keysym KP_Left = KP_4" \
        -e "keysym KP_Begin = KP_5" \
        -e "keysym KP_Right = KP_6" \
        -e "keysym KP_Home = KP_7" \
        -e "keysym KP_Up = KP_8" \
        -e "keysym KP_Prior = KP_9" \
        -e "keysym KP_Insert = KP_0" \
        -e "keysym KP_Delete = KP_Decimal"

numlockライトが常に点灯しないのはいいことです:)

5
ideasman42
  • Xfceキーボード設定:復元numlock状態のチェックを外します(これにより、すでにオンになっているときにライトがオフになります)
  • Xfceスタートアップ設定:スクリプトにメンションを追加します:sh /home/$USER/numlockalwayson.sh

脚本:

#timeout, otherwise it will not work upon boot/login (make two variants of the script. Use sleep 2 for the login variant)
sleep 20
xmodmap -e "keysym KP_Up = KP_8"
xmodmap -e "keysym KP_Left = KP_4"
xmodmap -e "keysym KP_Right = KP_6"
xmodmap -e "keysym KP_Down = KP_2"
#
xmodmap -e "keysym KP_Begin = KP_5"
#
xmodmap -e "keysym KP_Home = KP_7"
xmodmap -e "keysym KP_Next = KP_3"
xmodmap -e "keysym KP_Prior = KP_9"
xmodmap -e "keysym KP_End = KP_1"
#
xmodmap -e "keysym KP_Insert = KP_0"
xmodmap -e "keysym KP_Delete = KP_Decimal"
#
numlockx on

Num_Lockを押すと、このライトはオフになります。これがこのソリューションの唯一の欠点であり、私が持っていたものの大幅な改善です。このソリューションは、Altのような他の修飾キーを壊しません。

このソリューションを提供してくれたMichałGórnyに感謝します。

ボーナス

ログオフして再度ログインすると、スクリプトは機能しなくなります(再度機能させるには、再起動する必要があります)。これを修正するには、/ etc/lightdm/lightdm.conf(Manjaro Linux内の場所)を編集して、スクリプトのログインバリアントを追加します。

session-setup-script=sh /home/$USER/numlockalwayson-login.sh

また、LightDMは、ログオフするとnumロックをオフに切り替えます。これを修正するには、同じファイルに追加します。

greeter-setup-script=/usr/bin/numlockx on

保存することを忘れないでください。

常に機能させるには、Xfceの起動とこの構成の両方が必要です。

0
Smile4ever

xmodmapが有効になっている場合は、xkbを使用しないでください(現在は常に使用されています)。 xkbベースのソリューションは次のとおりです。numlockのキーコードを未使用のキーのコードに変更します。

/usr/bin/numlockx on
/usr/bin/xkbcomp $DISPLAY /tmp/kbmap.xkb
sed -i.bak 's/<NMLK> = 77;/<NMLK> = 98;/
            s/<KATA> = 98;/<KATA> = 77;/' /tmp/kbmap.xkb
/usr/bin/xkbcomp /tmp/kbmap.xkb $DISPLAY
0