Apex-Macros é outro programa para habilitar as chaves extras. Está escrito em C e pode ficar mais claro se você não estiver habituado a Haskell.
Eu suspeito que essa funcionalidade deva ser adicionada ao driver do kernel como uma peculiaridade de dispositivo.
O que funciona com este teclado no momento é a funcionalidade básica das teclas extras. Os programas ApexCtrl e Apex-Macros simplesmente enviam ao teclado um comando para reportar as chaves como chaves normais. Uma vez que este comando é enviado, o kernel recebe scancodes para as chaves L / M / MX e pode ser definido normalmente:
- O hwdb pode substituir o mapeamento de scancodes para códigos de teclas específicos
- O XKB pode substituir o mapeamento de códigos de teclas para keyyms específicos
- aplicativos podem ser configurados para atuar nessas chaves
Eu uso uma versão antiga do ApexCtl , embora a compilação tenha falhado da última vez que tentei. A combinação de definições de chave básicas em opções de hwdb e XKB personalizado permite-me definir as chaves extras para keyyms não utilizados, que podem ser macrod para iniciar qualquer programa desejado com ferramentas como xbindkeys
.
O hwdb que vem com o ApexCtl é para um formato antigo do udev e precisa ser atualizado. Eu acho que o Apex-Macros está usando os mesmos métodos, então o hwdb do ApexCtl deve ser efetivo com essa ferramenta também. Consulte a documentação do ApexCtl para a qual os scancodes pertencem a quais chaves de hardware e, em seguida, você pode ajustar as definições adequadamente .
# original -- ApexCtl/config/90-apex.hwdb
keyboard:usb:v1038p120[02]*
# new format + my tweaks
evdev:input:b0003v1038p120[028]*
KEYBOARD_KEY_0700a8=prog1
KEYBOARD_KEY_0700a9=prog2
KEYBOARD_KEY_0700ac=coffee
KEYBOARD_KEY_0700ad=msdos
KEYBOARD_KEY_0700e8=nextsong
KEYBOARD_KEY_0700e9=playpause
KEYBOARD_KEY_0700ea=previoussong
KEYBOARD_KEY_0700eb=stopcd
KEYBOARD_KEY_0700ec=record
KEYBOARD_KEY_0700f4=f13
KEYBOARD_KEY_0700f5=f14
KEYBOARD_KEY_0700f6=f15
KEYBOARD_KEY_0700f7=f16
KEYBOARD_KEY_0700f8=f17
KEYBOARD_KEY_0700f9=f18
KEYBOARD_KEY_0700fa=f19
KEYBOARD_KEY_0700fb=f20
KEYBOARD_KEY_0700fc=f21
KEYBOARD_KEY_0700fd=f22
KEYBOARD_KEY_0700fe=f23
KEYBOARD_KEY_0700ff=f24
Com essas definições de código de acesso no hwdb, eu uso esse arquivo de símbolos XKB para definir opções conforme necessário. Normalmente eu uso a meta-opção apexf13
para extrair várias opções. As substituições reais são feitas em pequenas opções que manipulam um grupo de chaves por vez, para que possam ser substituídas sem afetar os outros grupos de chaves.
// place in /usr/share/X11/xkb/symbols/apex
// or a custom location for use with setxkbmap -I
// modify /usr/share/X11/xkb/rules/evdev{,.lst,.xml} to use systemwide
// These are intended to be loaded after inet(evdev) to override
// its generic ideas.
// for use with Apex300
// L1-L2 as layout toggles
partial alphanumeric_keys
xkb_symbols "lkeys_grp" {
key <I156> { [ ISO_Next_Group, ISO_First_Group ] };
key <I157> { [ ISO_Prev_Group, ISO_Last_Group ] };
}; // end of "lkeys_grp"
// for use with Apex300
// L1-L2 as VolUp-VolDown
partial alphanumeric_keys
xkb_symbols "lkeys_vol" {
key <I156> { [ XF86AudioRaiseVolume ] };
key <I157> { [ XF86AudioLowerVolume ] };
}; // end of "lkeys_vol"
// for use with Apex300
// Combo arrows mute
partial alphanumeric_keys
xkb_symbols "arrows_mute" {
key <I160> { [ XF86AudioMicMute ] };
key <I159> { [ XF86AudioMute ] };
}; // end of "arrows_mute"
// for use with Apex300
// Combo arrows as browser Back/Forward, shifted Stop/Reload
partial alphanumeric_keys
xkb_symbols "arrows_www" {
key <I160> { [ XF86Back, XF86Stop ] };
key <I159> { [ XF86Forward, XF86Reload ] };
}; // end of "arrows_www"
// for use with Apex300
// MX1-MX5 as media keys
partial alphanumeric_keys
xkb_symbols "mxkeys_media" {
key <I171> { [ XF86AudioNext ] };
key <I172> { [ XF86AudioPlay, XF86AudioPause ] };
key <I173> { [ XF86AudioPrev ] };
key <I174> { [ XF86AudioStop, XF86Eject ] };
key <I175> { [ XF86AudioRecord ] };
}; // end of "mxkeys_media"
// for use with Apex300
// MX1-MX5 as Launch1-5
partial alphanumeric_keys
xkb_symbols "mxkeys_prog" {
key <I171> { [ XF86Launch1 ] };
key <I172> { [ XF86Launch2 ] };
key <I173> { [ XF86Launch3 ] };
key <I174> { [ XF86Launch4 ] };
key <I175> { [ XF86Launch5 ] };
}; // end of "mxkeys_prog"
// for use with Apex300
// M1-M4 as F13-F16
partial alphanumeric_keys
xkb_symbols "mkeys1_f13" {
key <FK13> { [ F13 ] };
key <FK14> { [ F14 ] };
key <FK15> { [ F15 ] };
key <FK16> { [ F16 ] };
}; // end of "mkeys1_f13"
// for use with Apex300
// M5-M8 as F17-F20
partial alphanumeric_keys
xkb_symbols "mkeys5_f17" {
key <FK17> { [ F17 ] };
key <FK18> { [ F18 ] };
key <FK19> { [ F19 ] };
key <FK20> { [ F20 ] };
}; // end of "mkeys5_f17"
// for use with Apex300
// M9-M12 as F21-F24
partial alphanumeric_keys
xkb_symbols "mkeys9_f21" {
key <FK21> { [ F21 ] };
key <FK22> { [ F22 ] };
key <FK23> { [ F23 ] };
key <FK24> { [ F24 ] };
}; // end of "mkeys9_f21"
// for use with Apex300
// M1-M12 as F13-F24
partial alphanumeric_keys
xkb_symbols "mkeys_f13" {
include "apex(mkeys1_f13)"
include "apex(mkeys5_f17)"
include "apex(mkeys9_f21)"
}; // end of "mkeys_f13"
// for use with Apex300
// M5-M8 as Launch5-8
partial alphanumeric_keys
xkb_symbols "mkeys5_prog5" {
key <FK17> { [ XF86Launch5 ] };
key <FK18> { [ XF86Launch6 ] };
key <FK19> { [ XF86Launch7 ] };
key <FK20> { [ XF86Launch8 ] };
}; // end of "mkeys5_prog5"
// for use with Apex300
partial alphanumeric_keys
xkb_symbols "apexf13" {
include "apex(mkeys_f13)"
include "apex(lkeys_volmute)"
include "apex(arrows_mute)"
include "apex(mxkeys_media)"
}; // end of "apexf13"
// define other options here
Quando os símbolos hwdb e xkb modificados forem carregados, você poderá usá-los nos aplicativos como seria de esperar. A única chave que não é configurável é a chave do logo SteelSeries, que é essencialmente uma chave Fn
(brevemente documentada em Geometria Apex300 da XKB ).
Como exemplo, eu uso essa configuração em i3wm
para vincular as chaves de mídia a playerctl
:
#$mod+key activates playerctl thru dbus for MPRIS-capable players
bindsym $mod+XF86AudioRaiseVolume exec playerctl volume 0.05+
bindsym $mod+XF86AudioLowerVolume exec playerctl volume 0.05-
bindsym $mod+XF86AudioNext exec playerctl next
bindsym $mod+XF86AudioPrev exec playerctl previous
bindsym $mod+XF86AudioPlay exec playerctl play-pause
bindsym $mod+XF86AudioStop exec playerctl stop