5.2 KiB
- Alternative settings for g910-gkeys
Alternative settings for g910-gkeys
This document will explain how to setup g910-gkeys by limiting as much as possible the usage of a global config, the idea being to setup global mapping in a static manner, and let the user set the actions in his/her own environment.
Preamble
g910-gkeys
allows different actions : typeout
, shortcut
and run
. All of these actions will be performed on the process environment, that is root
. Also, these actions are global.
g910-gkeys configuration file (/etc/g910-gkeys/config.json)
The configuration chosen will ba basic: assign each g-key
to a key which does not exist on physical keyboard. Any key could be used, like specific localized keys which do not exist on your keyboard (example: Japanese keys for an English keyboard), or function keys above F12.
We will choose to map them to Function keys F13
to F21
. It is possible that some of these F-keys are already used on your system (example: some media keys may be assigned to F20
). In this case, simply use another F-key.
The g910-gkeys
will be (skipping F20
on my system):
{
"__comment": "I was unable to use F20, even xev does not show the keycode. It just mutes/unmutes sound, same as the G910's <mute> button",
"keyboard_mapping": "en",
"g1": {
"hotkey_type": "shortcut",
"do": "F13"
},
"g2": {
"hotkey_type": "shortcut",
"do": "F14"
},
"g3": {
"hotkey_type": "shortcut",
"do": "F15"
},
"g4": {
"hotkey_type": "shortcut",
"do": "F16"
},
"g5": {
"hotkey_type": "shortcut",
"do": "F17"
},
"g6": {
"hotkey_type": "shortcut",
"do": "F18"
},
"g7": {
"hotkey_type": "shortcut",
"do": "F19"
},
"g8": {
"hotkey_type": "shortcut",
"do": "F21"
},
"g9": {
"hotkey_type": "shortcut",
"do": "F22"
}
}
X11 keyboard mapping
By default, our F13-F22 may be mapped to some defaults (see /usr/share/X11/xkb/symbols/inet). For example, F13
will return XF86Tools
. This is not what we want. Instead we want F13-F22 to return themselves. It could be possible to keep the default mappings, but it makes less sense.
You can check if this mapping is done on your system with:
$ xmodmap -pke | grep -E 'keycode (19[1-9]|200)'~
keycode 191 = XF86Tools NoSymbol XF86Tools
keycode 192 = XF86Launch5 NoSymbol XF86Launch5
keycode 193 = XF86Launch6 NoSymbol XF86Launch6
...
keycode 200 = XF86TouchpadOn NoSymbol XF86TouchpadOn
If the output looks like the above, you will need to use one of the two above methods :
Fix F-keys mapping with .Xmodmaprc
User configuration
Note: Configuration below will make the G-keys
active only when user is logged-on, as any other key.
We will assign the F-keys we defined in config.json
to any program (this includes graphical programs), or to send a string to active window (using xvkbd1).
xvkbd not only allows to send strings ("hello, World!"), but also modifiers (as Control-A
, Alt-B
, Control-Left
), mouse events (motion, buttons), etc… This is a subset of the typeout option of config.json. See xbkbd man page
for more details.
Below are some examples (screenshots from Xubuntu 22.10
). We will define the following actions :
G1
: Activate the Emacs main window (whose title is always "GNU Emacs").Shift-G1
: Launch Gnome Terminal.G2
(including with modifiers): Send strings/commands results to active window.G4
: Send current date to active window.G5
: Assigned toHyper
modifier:G5 + a
will beHyper-a
, asControl + a
isControl-a
.G6
: Will move the cursor to top-left corner.
All settings below (except for G5
) are configurable in Settings/keyboard
, Application Shortcuts
tab, or, for pasting text, via autokey
:
[[./img/g910-keyboard-settings.png]Xfce keyboard settings]
[[./img/autokey.png]Autokey screenshot]
G1: Activate the Emacs main window
In Application Shortcut
section, click on Add
, then set command to wmctrl -F -a "GNU Emacs"
, click OK
, then press G1
when asked.
Shift-G1: Launch Gnome Terminal
In Application Shortcut
section, click on Add
, then set command to gnome-terminal
, click OK
, then press Shift-G1
when asked.
G2: Send different strings to active window
We can send static/dynamic strings to active window, using autokey
(on Ubuntu 22.10, autokey is provided by autokey-gtk
or autokey-qt
packages).
Note that you can use any combination of modifiers (for example Shift+Meta+G2). Example 1: Insert Japanese "山" with Shift-Control-G2 :
Example 2: Insert current date to active window with G2 :
G5: Assign to Hyper modifier
In $HOME/.Xmodmap
, (create if non existant) rmove any line regarding add the following lines~/Move mouse cursor to top-left corner
In Application Shortcut
section, click on Add
, then set command to xvkbd -text '\x0\y0'
(or xdotool mousemove 0 0
), click OK
, then press G6
when asked.
G6: Move mouse cursor to top-left corner
In Application Shortcut
section, click on Add
, then set command to xvkbd -text '\x0\y0'
(or xdotool mousemove 0 0
), click OK
, then press G6
when asked.
NOTE: wayland equivalent to : wtype