如何用 xorg.conf.d 替換我的鍵盤和滑鼠 udev 規則?
由於不可能使影響 Xorg 設置的 udev 規則在啟動時執行,我想用其他替代方法替換這些規則。目前,我編寫了兩個主要的 udev 腳本。第一個在插入或移除鍵盤以及啟動時更改鍵盤佈局
xcape
。當插入特定滑鼠時,第二個會減慢指針的速度,並且還允許通過滑鼠輸入喚醒電腦。我正在使用(K)ubuntu 13.04。udev 規則和腳本遵循,xmodmaps 也是如此。
/etc/udev/rules.d/00-teck.rules
:ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0e6a", ATTR{idProduct}=="030c", RUN+="/usr/local/bin/TECK_connect" ACTION=="remove", SUBSYSTEM=="usb", RUN+="/usr/local/bin/TECK_disconnect"
/usr/local/bin/TECK_connect
:#!/usr/bin/env bash export DISPLAY=:0.0 cp -f /home/sparhawk/HDD/Computer/Xmodmaps/Xmodmap_for_TECK /home/sparhawk/.Xmodmap sudo -u sparhawk setxkbmap -layout us -variant altgr-intl sudo -u sparhawk xmodmap /home/sparhawk/.Xmodmap sudo -u sparhawk pkill xcape sudo -u sparhawk xcape -e 'Alt_L=Return' && sudo -u sparhawk notify-send "xmodmap" "TECK connected." -i /usr/share/icons/oxygen/48x48/devices/input-keyboard.png --hint=int:transient:1
/usr/local/bin/TECK_disconnect
:#!/usr/bin/env bash if [[ `lsusb | egrep -c 'Apple, Inc\. Aluminum Keyboard'` == 0 ]] && [[ `lsusb | egrep -c 'Megawin Technology Co\., Ltd'` == 0 ]]; then export DISPLAY=:0.0 cp -f /home/sparhawk/HDD/Computer/Xmodmaps/Xmodmap_for_internal_Dell_keyboard /home/sparhawk/.Xmodmap sudo -u sparhawk setxkbmap -layout us -variant altgr-intl sudo -u sparhawk xmodmap /home/sparhawk/.Xmodmap sudo -u sparhawk pkill xcape fi
/etc/udev/rules.d/90-razerwakeup-slowdown.rules
:ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1532", ATTRS{idProduct}=="0016" RUN+="/bin/sh -c 'echo $env{DEVPATH} | grep -q usb./[^/]*/[^/]*/[^/]*$ && echo enabled > /sys$env{DEVPATH}/../power/wakeup; razer_slowdown'"
/usr/local/bin/razer_slowdown
:#!/usr/bin/env bash # slow down the tracking speed of a razer mouse. # to check, $ xinput --list-props "Razer Razer DeathAdder"| grep 'Constant Deceleration' # which was originally 1 scriptproper () { sleep 0.5 # perhaps not necessary, but putting it in background is. export DISPLAY=:0.0 sudo -u sparhawk xinput --set-prop "Razer Razer DeathAdder" "Device Accel Constant Deceleration" 3 } scriptproper &
~/HDD/Computer/Xmodmaps/Xmodmap_for_TECK
:! map right blank key to "menu" for KDE. keycode 97 = Menu Menu ! Swap left ctrl and shift keycode 50 = Control_L Control_L keycode 37 = Shift_L Shift_L ! Replace right ctrl with shift keycode 105 = Shift_R Shift_R ! Replace right shift, ' keycode 62 = apostrophe quotedbl keycode 48 = slash question ! Enter to alt keycode 36 = Alt_L Meta_L ! AltGr to Compose !keycode 108 = Multi_key ! AltGr+key keycode 20 = minus underscore minus underscore endash emdash keycode 60 = period greater period greater ellipsis ! Left blank key to AltGr keycode 101 = ISO_Level3_Shift Multi_key ISO_Level3_Shift ! key to the left of ` keycode 94 = Return NoSymbol Return ! Fn+F5 and Fn+F6 control brightness keycode 148 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown keycode 179 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp clear Shift clear Lock clear Control clear Mod1 clear Mod2 clear Mod3 clear Mod4 clear Mod5 add Shift = Shift_L Shift_R add Lock = Caps_Lock add Control = Control_L Control_R add Mod1 = Alt_L add Mod2 = Num_Lock add Mod4 = Super_L Super_R add Mod5 = Mode_switch ISO_Level3_Shift ISO_Level3_Shift ISO_Level3_Shift
~/HDD/Computer/Xmodmaps/Xmodmap_for_internal_Dell_keyboard
:! map right alt to ISO_Level3_Shift (e.g. for compose) keycode 108 = ISO_Level3_Shift Multi_key ! Swap left ctrl and caps lock keycode 66 = Control_L keycode 37 = Caps_Lock ! AltGr+key keycode 20 = minus underscore minus underscore endash emdash keycode 60 = period greater period greater ellipsis keycode 105 = Control_R Multi_key clear Shift clear Lock clear Control clear Mod1 clear Mod2 clear Mod3 clear Mod4 clear Mod5 add Shift = Shift_L Shift_R add Lock = Caps_Lock add Control = Control_L Control_R add Mod1 = Alt_L add Mod2 = Num_Lock add Mod4 = Super_L Super_R add Mod5 = Mode_switch ISO_Level3_Shift ISO_Level3_Shift ISO_Level3_Shift
為了替換 xcape,我安裝了at-home-modifier,它做了類似的事情,但在根級別。它具有由 xorg 規則配置的額外優勢,允許它僅在特定鍵盤上操作。
因此,
/etc/X11/xorg.conf.d/11-TECK-keymap.conf
包含Section "InputClass" Identifier "TECK" Driver "evdev" Option "XKBOptions" "terminate:ctrl_alt_bksp" # and so on # If you save this file under xorg.conf.d/ : Option "AutoServerLayout" "on" MatchIsKeyboard "on" MatchProduct "TrulyErgonomic.com Truly Ergonomic Computer Keyboard" ### at-home-modifier options begin here. # The basic option. Option "XkbLayout" "us" Option "XkbVariant" "altgr-intl" Option "XKbOptions" "lv3:ralt_switch_multikey,numpad:pc" Option "TransMod" "36:64" # Defines key/modifier pairs. Use xev. e.g. Enter (real key):Alt (virtual key). EndSection
對於鍵盤映射,我改為使用 TECK 新發布的軟體來重新配置韌體(雖然我可以修改
/usr/share/X11/xkb/keycodes/evdev
)。對於AltGr
鍵,我直接修改/usr/share/X11/xkb/symbols/us
,替換xkb_symbols "intl" {
部分中的條目我換了
key <AE11> { [ minus, underscore, yen, dead_belowdot ] };
和
key <AE11> { [ minus, underscore, endash, emdash ] };
和
key <AB09> { [ period, greater, dead_abovedot, dead_caron ] };
和
key <AB09> { [ period, greater, ellipsis, dead_caron ] };
/var/lib/xkb/*.xkm
然後我按照這個答案刪除了記憶體的 xkb 配置,然後重新啟動。我仍然不確定如何使 Fn+F5 和 Fn+F6 控制亮度(
XF86MonBrightnessDown
和XF86MonBrightnessUp
)