keyd
A keyd egy olyan szolgáltatás amelyet arra használnak, hogy a billentyűzet gombjainak elrendezését újra lehessen szervezni. Mind az Xorg, mind a Wayland támogatásával lehetővé teszi a felhasználó számára, hogy alkalmazásonként és globálisan is leképhesse a billentyűgombokat.
Telepítés
Emerge
A keyd jelenleg csak a GURU ebuild szoftvercsomag-tárolóban érhető el.
Ha az átfedés (overlay) nincs engedélyezve, akkor futtassa a következő parancsot:
root #
eselect repository enable guru
root #
emaint sync -r guru
Az átfedés (overlay) aktiválása után a keyd telepíthetővé válik:
root #
emerge --ask app-misc/keyd
Használat
Van egy globális beállításfájl a /etc/keyd/default.conf elérési úton, amely meghatározza a "rétegeket". Ezek billentyűcsomagok, amelyek egymás után vagy a réteget aktiváló gombokkal egyidejűleg aktiválhatók.
Az alkalmazásonkénti használathoz külön beállítás található a ~/.config/keyd/app.conf elérési úton, amely alkalmazásonként határozza meg a rétegeket. Ezekben a rétegekben további billentyűket határozhat meg a globális beállításokhoz. A billentyű itt dupla formát is felvehet, például <layer>.<key>.
A globális beállítás a "keyd service" aktiválásával lép életbe.
A keyd a "keyd-application-mapper" szkripttel együtt kerül terjesztésre, amely az ablakos környezetben való használatra szolgál. A szkript használatához a felhasználónak engedélyre van szüksége a "keyd group" számára, amelyet a következő parancs segítségével lehet megadni:
root #
usermod -aG keyd orbanviktor
Beállításesetek alkalmazásonkénti használathoz
Három billentyűgomb, mint például az Alt + Shift + v
Itt két előre meghatározott réteg van: Az alt és a shift. Létre kell hoznia egy globális kombinált réteget "[alt+shift]" néven, amelyet ezt követően rétegnévként használhat.
.config/keyd/app.conf
alt+shift.v = C-end
Kettő művelet egy billentyűgombon
Ha több billentyűgombot kell lenyomni, akkor használhatja a "macro" műveletet, ahol több kifejezést szóközzel lehet elválasztani.
Ha valamilyen belső műveletre van szükség, például "clear()", akkor keresse a "clearm()" műveletet, amely a "clear()" hívása előtt végrehajtja a kifejezést.
Akkordok
Az "oneshot()" művelettel valósítható meg, például a "Ctrl+x billentyűgomb kombinációja":
control.x = oneshot(<gloval layer with some key>)
Másik réteg törlése
Kizárólag a "clearm()" működik a jelenlegi stabil verzióban, amely minden réteget megszakít.
Biztonsági aggályok
Amikor egy felhasználó hozzáférést kap a keyd csoporthoz, és ezáltal a /run/keyd.socket fájlhoz, amely lehetővé teszi a rendszerszintű billentyűküldést, ez egy biztonsági rést hoz létre, amelyet a felhasználói környezetben található rosszindulatú programok kihasználhatnak. Ez potenciálisan magasabb szintű root hozzáférést eredményezhet. Ez a sérülékenység minden uinput-alapú alkalmazást érint, amelyek lehetővé teszik tetszőleges billentyűk küldését a felhasználói térből.
Wayland biztonság
Ha a szkriptet root felhasználóként futtatjuk a Wayland környezeti változókkal, akkor ez a sérülékenység megszüntethető.
user $
sudo --preserve-env=WAYLAND_DISPLAY,XDG_RUNTIME_DIR /usr/bin/keyd-application-mapper
Ehhez a parancshoz adjon sudo jogosultságot a jelenlegi felhasználó számára:
orbanviktor ALL=(root) SETENV:NOPASSWD:/usr/bin/keyd-application-mapper
Másolja a felhasználói beállítást a rendszergazda root könyvtárába:
root #
mkdir -p /root/.config/keyd
root #
cp /home/orbanviktor/.config/keyd/app.conf /root/.config/keyd/app.conf
Vonja vissza az jogosultságokat a felhasználó "keyd" csoportból történő eltávolítás segítségével.
root #
gpasswd -d orbanviktor keyd
Példa az Emacs billentyűgombok beállítására a Firefox számára
.config/keyd/app.conf
Firefox számára[firefox-esr|*]
# Firefox
alt.x = C-l
alt.a = C-pageup
alt.e = C-pagedown
control.s = C-f
# - Firefox built-in:
# control.[ - back
# control.] - forward
# F3 - search forward
# shift.F3 - search backward
# - enter, escape
control.g = clearm(escape)
control.m = enter
# - begin, end of string
control.a = home
control.e = end
# - edit
control.h = backspace
control.d = delete
control.l = left
control.f = right
control.n = down
control.k = up
alt.l = C-left
alt.f = C-right
control.slash = C-z
# - scroll
alt.v = pageup
control.v = pagedown
alt.z = up
control.z = down
# - copy, paste
control.w = clearm(C-x)
alt.w = clearm(C-c)
control.y = clearm(C-v)
alt.c = C-v
# - selection mode - remember: C+h and C+d don't work with
control.space = toggle(shift)
control.c = clearm(C-c)
# - select all
control.x = oneshot(control_x)
/etc/keyd/default.conf
Globálisan[ids]
*
# - Firefox copy text
[control+alt]
w = C-w
[alt+shift]
dot = C-end
comma = C-home
[control_x]
h = C-a