Como posso substituir minhas regras do udev de teclado e mouse com xorg.conf.d?

2

Como é impossível fazer com que as regras do udev que afetam as configurações do Xorg sejam executadas na inicialização , eu gostaria de substituí-las com outras alternativas. No momento, tenho dois scripts principais do udev que eu escrevi. A primeira altera o layout do teclado quando o teclado é conectado ou removido, além de iniciar xcape . O segundo retarda o ponteiro quando um mouse específico é conectado, e também permite a entrada do mouse para acordar o computador.

Estou usando o (K) Ubuntu 13.04. As regras e scripts do udev seguem, assim como os 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
    
por Sparhawk 24.05.2013 / 13:43

1 resposta

0

Para substituir o xcape, eu instalei o modificador , que faz uma coisa semelhante, mas um nível de raiz. Ele tem a vantagem adicional de ser configurado pelas regras do xorg, permitindo que ele opere somente em teclados específicos.

Por isso, /etc/X11/xorg.conf.d/11-TECK-keymap.conf contém

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

Para os mapas de teclado, eu usei o recém-lançado software para reconfigurar o firmware (embora eu possa ter modificado /usr/share/X11/xkb/keycodes/evdev ). Para as chaves AltGr , modifiquei diretamente /usr/share/X11/xkb/symbols/us , substituindo as entradas na seção xkb_symbols "intl" {

eu substituí

key <AE11> { [ minus, underscore, yen, dead_belowdot ] };

com

key <AE11> { [ minus, underscore, endash, emdash ] };

e

key <AB09> { [ period, greater, dead_abovedot, dead_caron ] };

com

key <AB09> { [ period, greater, ellipsis, dead_caron ] };

Em seguida, apaguei as configurações do xkb em cache em /var/lib/xkb/*.xkm conforme esta resposta e reiniciei.

Ainda não sei como fazer o brilho do controle Fn + F5 e Fn + F6 ( XF86MonBrightnessDown e XF86MonBrightnessUp )

    
por 18.08.2013 / 15:40