Numpad hotkeys on linux: Difference between revisions

From Lucca's Wiki
Jump to navigationJump to search
No edit summary
No edit summary
 
(21 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Making numpad hotkeys on linux is a bit more tricky than it is on windows due to the critical lack of autohotkey ;-;
Making numpad hotkeys on linux is a bit more tricky than it is on windows due to the critical lack of autohotkey
<hr>
<hr>
keyd is an excellent way to make hotkeys:<hr>


You'll need xmodmap, I created a file like this:  
You can force X11 to ignore specific keyboards by adding a file to /etc/X11/xorg.conf.d/22-ignorethisdevice.conf:


~/.Xmodmap:
Section "InputClass"
    Identifier "DisableGearHeadNumpad"       
    MatchIsKeyboard "on"
    MatchUSBID "04d9:1503"
    Option "Ignore" "true"
EndSection


<code>keycode 90 = Hyper_R</code>
<hr>
I've created a script to handle keys pressed by a specific numpad:
 
#!/bin/bash
keyd monitor |
while
  read;
  do
  if echo "$REPLY" | fgrep "04d9:1503:20f521c9"; then
  if echo "$REPLY" | fgrep "kp0 down"; then echo "this is button 0";
  fi
  if echo "$REPLY" | fgrep "kp1 down"; then echo "this is button 1";
  fi
  if echo "$REPLY" | fgrep "kp2 down"; then echo "this is button 2";
  fi
  if echo "$REPLY" | fgrep "kp3 down"; then echo "this is button 3";
  fi
  if echo "$REPLY" | fgrep "kp4 down"; then echo "this is button 4";
  fi
  if echo "$REPLY" | fgrep "kp5 down"; then echo "this is button 5";
  fi
  if echo "$REPLY" | fgrep "kp6 down"; then echo "this is button 6";
  fi
  if echo "$REPLY" | fgrep "kp7 down"; then echo "this is button 7";
  fi
  if echo "$REPLY" | fgrep "kp8 down"; then echo "this is button 8";
  fi
  if echo "$REPLY" | fgrep "kp9 down"; then echo "this is button 9";
  fi
  if echo "$REPLY" | fgrep "numlock down"; then echo "this is button numlock";
        ~/sh/rmctrl/commands/lightoff   
  fi
  if echo "$REPLY" | fgrep "kpslash down"; then echo "this is button /";
        ~/sh/rmctrl/commands/lighton   
  fi
  if echo "$REPLY" | fgrep "kpasterisk down"; then echo "this is button *";
        ~/sh/rmctrl/commands/monitoroff 
  fi
  if echo "$REPLY" | fgrep "backspace down"; then echo "this is button backspace";
        ~/sh/rmctrl/commands/monitoron 
  fi
  fi
done
 
 
...and a systemd service to autostart it: [<code>/home/lucka/.config/systemd/user/numpadhotkeys.service</code>]
 
[Unit]
Description=Script that handles numpad hotkeys
[Service]
ExecStart=/home/lucka/sh/numpad-hotkeys-keyd.sh
Restart=on-failure
[Install]
WantedBy=default.target
 
 
<hr>
You could also xmodmap, but it has issues with hotplugging. You can use it like this:
 
xmodmap -e 'keycode 90 = Hyper_R'
 
You can use XCape to allow the modifier keys to send actions on their own.
 
sudo apt install xcape
 
xcape -e 'Hyper_R=0'
 
 
I've started work on porting my numpad hotkey script to python so it can work on linux: clipboardbuffers.py

Latest revision as of 00:43, 15 August 2025

Making numpad hotkeys on linux is a bit more tricky than it is on windows due to the critical lack of autohotkey


keyd is an excellent way to make hotkeys:


You can force X11 to ignore specific keyboards by adding a file to /etc/X11/xorg.conf.d/22-ignorethisdevice.conf:

Section "InputClass"
   Identifier "DisableGearHeadNumpad"         
   MatchIsKeyboard "on"
   MatchUSBID "04d9:1503"
   Option "Ignore" "true"
EndSection

I've created a script to handle keys pressed by a specific numpad:

#!/bin/bash
keyd monitor |
while
 read;
 do
 if echo "$REPLY" | fgrep "04d9:1503:20f521c9"; then
  if echo "$REPLY" | fgrep "kp0 down"; then echo "this is button 0";
  fi
  if echo "$REPLY" | fgrep "kp1 down"; then echo "this is button 1";
  fi
  if echo "$REPLY" | fgrep "kp2 down"; then echo "this is button 2";
  fi
  if echo "$REPLY" | fgrep "kp3 down"; then echo "this is button 3";
  fi
  if echo "$REPLY" | fgrep "kp4 down"; then echo "this is button 4";
  fi
  if echo "$REPLY" | fgrep "kp5 down"; then echo "this is button 5";
  fi
  if echo "$REPLY" | fgrep "kp6 down"; then echo "this is button 6";
  fi
  if echo "$REPLY" | fgrep "kp7 down"; then echo "this is button 7";
  fi
  if echo "$REPLY" | fgrep "kp8 down"; then echo "this is button 8";
  fi
  if echo "$REPLY" | fgrep "kp9 down"; then echo "this is button 9";
  fi
  if echo "$REPLY" | fgrep "numlock down"; then echo "this is button numlock";
       ~/sh/rmctrl/commands/lightoff    
  fi
  if echo "$REPLY" | fgrep "kpslash down"; then echo "this is button /";
       ~/sh/rmctrl/commands/lighton     
  fi
  if echo "$REPLY" | fgrep "kpasterisk down"; then echo "this is button *";
       ~/sh/rmctrl/commands/monitoroff  
  fi
  if echo "$REPLY" | fgrep "backspace down"; then echo "this is button backspace";
       ~/sh/rmctrl/commands/monitoron   
  fi
 fi
done


...and a systemd service to autostart it: [/home/lucka/.config/systemd/user/numpadhotkeys.service]

[Unit]
Description=Script that handles numpad hotkeys

[Service]
ExecStart=/home/lucka/sh/numpad-hotkeys-keyd.sh
Restart=on-failure

[Install]
WantedBy=default.target



You could also xmodmap, but it has issues with hotplugging. You can use it like this:

xmodmap -e 'keycode 90 = Hyper_R'

You can use XCape to allow the modifier keys to send actions on their own.

sudo apt install xcape
xcape -e 'Hyper_R=0'


I've started work on porting my numpad hotkey script to python so it can work on linux: clipboardbuffers.py