Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Cześć.
Mam lapka Sony Vaio VPCF11M1E a nim debiana jessie 64 z dystrybucyjnym jądrem 3.13-1-amd64, xfce i ligtdm. Poprawnie działają mi tylko 3 przyciski regulacji jasności i przełączania wyświetlacza. Przycisk usypiania jest wykorzystywany przez xfce powera managera, jak go wyłączę to przycisk usypiania wyłącza mi wyświetlacz i muszę zamknąć system przyciskiem zasilania. Usypianie przez pm-suspend w terminalu działa ok.
opierałem sie na linkach:
https://wiki.archlinux.org/index.php/Sony_Vaio_VPC-F11M1E#Using_udev
http://code.google.com/p/vaio-f11-linux/wiki/ProgrammableKeys (acpi_listen)
w /lib/udev/rules.d/95-keymap.rules mam:
ENV{DMI_VENDOR}=="Sony*", KERNELS=="input*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony" # Older Vaios have some different keys ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="*PCG-C1*|*PCG-K25*|*PCG-F1*|*PCG-F2*|*PCG-F3*|*PCG-F4*|*PCG-F5*|*PCG-F6*|*PCG-FX*|*PCG-FRV*|*PCG-GR*|*PCG-TR*|*PCG-NV*|*PCG-Z*|*VGN-S360*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-old" # Some Sony VGN/VPC models have yet another one ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="VGN-AR71*|VGN-FW*|VGN-Z21*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-vgn" ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="VPC*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-vpc"
wygląda że używany jest plik /lib/udev/keymaps/module-sony (jak zamieniłem tu keycodes jasności to przyciski faktycznie działały odwrotnie):
0x06 mute # Fn+F2 0xAE volumedown # Fn+F3 bylo 07 0xB0 volumeup # Fn+F4 bylo 08 0x09 brightnessdown # Fn+F5 0x0A brightnessup # Fn+F6 0x0B switchvideomode # Fn+F7 0x0E zoom # Fn+F10 0x10 suspend # Fn+F12
/lib/udev/findkeyboards AT keyboard: input/event0 Unknown type: input/event17 module: input/event3
jedno urządzenie rozpoznaje część przycisków:
/lib/udev/keymap -i input/event3 Press ESC to finish, or Control-C if this device is not your primary keyboard scan code: 0x09 key code: brightnessdown scan code: 0x0A key code: brightnessup scan code: 0x0B key code: switchvideomode scan code: 0x0D key code: zoomout scan code: 0x0E key code: zoomin scan code: 0x10 key code: suspend scan code: 0x1F key code: help scan code: 0x19 key code: prog1 scan code: 0x3B key code: vendor
i tu działają jasność i wadliwie usypianie, podejrzewam że reszta zadziała też lub będę mógł przypisać do key code (albo zrobić swój key code) jakąś akcję/skrypt tylko nie wiem gdzie i jak TU POMÓŻCIE proszę.
na drugim urządzeniu przy rozpoznawaniu wstawia pełno enterów i pokazuje pozostałe przyciski:
/lib/udev/keymap -i input/event0 Press ESC to finish, or Control-C if this device is not your primary keyboard scan code: 0xA0 key code: mute scan code: 0xAE key code: volumedown scan code: 0xB0 key code: volumeup
tutaj nie wiem gdzie key code volumedown ma być dalej zdefiniowany żeby faktycznie przyciszał.
i jeszcze acpi_listen:
button/mute MUTE 00000080 00000000 K button/volumedown VOLDN 00000080 00000000 K button/volumeup VOLUP 00000080 00000000 K video/brightnessdown BRTDN 00000087 00000000 K sony/hotkey SNY5001:00 00000001 00000010 sony/hotkey SNY5001:00 00000001 0000003b video/brightnessup BRTUP 00000086 00000000 K sony/hotkey SNY5001:00 00000001 00000011 sony/hotkey SNY5001:00 00000001 0000003b video/switchmode VMOD 00000080 00000000 K sony/hotkey SNY5001:00 00000001 00000012 sony/hotkey SNY5001:00 00000001 0000003b
dalej powiększanie i pomniejszanie:
sony/hotkey SNY5001:00 00000001 00000014 sony/hotkey SNY5001:00 00000001 0000003b sony/hotkey SNY5001:00 00000001 00000015 sony/hotkey SNY5001:00 00000001 0000003b
usypianie:
button/suspend SUSP 00000080 00000000 K sony/hotkey SNY5001:00 00000001 00000017 sony/hotkey SNY5001:00 00000001 0000003b
i 3 bonusowe Assists S1 i VAIO
sony/hotkey SNY5001:00 00000001 00000028 ^[[28~sony/hotkey SNY5001:00 00000001 00000038 button/prog1 PROG1 00000080 00000000 K sony/hotkey SNY5001:00 00000001 00000020 sony/hotkey SNY5001:00 00000001 00000038 button/vendor VNDR 00000080 00000000 K sony/hotkey SNY5001:00 00000001 00000049 sony/hotkey SNY5001:00 00000001 00000038
jak zamieniłem jasność i działały przyciski odwrotnie to acpi_listen też pokazywał info "video/*" odwrotnie czyli jakby acpi dostawał info od udev???
z tego co widzę to mam dwa urządzenia wejściowe event3 : sony i event0: jakiś noname, chcę im poprzypisywać akcje np poprawne usypianie bez xfce powera managera czy regulację głośności a innym po prostu skrypt uruchamiający np terminal albo przeglądarkę, nie wiem już jak to zrobić i czy za pomocą udev tylko czy acpi (events/actions)
Z góry dzięki za pomoc i cierpliwość w czytaniu posta...!
Ostatnio edytowany przez peadyr (2014-04-05 00:31:39)
Offline
Poczytaj tu:
http://forum.dug.net.pl/viewtopic.php?id=25360
Offline
przeglądnąłem i widzę tam tylko rozpoznawanie przez acpi (events/actions), jakie jest "elegantsze" rozwiązanie w debianie przez acpi czy udev? u mnie widzę jakby działała konfiguracja udev tylko...
chyba nie do końca rozumiem współistnienie w tej kwetsii acpi i udev?
Offline
Jeżeli udev rozpoznaje wszystkie zdarzenia, to naskrob sobie odpowiednie skrypty tak odpalane.
Chyba nie ma znaczenia czy to przez acpi czy udev. Nawet udev powinien być mniej problematyczny.
Chodzi tylko o stworzenie skryptów dopasowanych do swojego sprzętu bo te standardowe ze nie zawsze działają na każdym sprzęcie prawidłowo.
Offline
A takie ogólne pytanie
Czy nie można na sztywno ustawić w Xfce4 skrótów klawiszowych? W zasadzie to robiłem (np, skrót od kalkulatora) i nie będzie dłubania w konsoli (chyba, że przyciski w ogóle nie działają) [a nie - że nie mają ustawionych funkcji]
Fervi
Offline
E tam skrypty. Wystarczy prosta regułka i plik z mapowaniem klawiszy.
Plik na wzór /etc/udev/rules.d/95-keymap-media-keyboard-elite.rules :
KERNEL=="event*", ACTION=="add", SUBSYSTEM=="input", SUBSYSTEMS=="usb", ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c30f", RUN+="/lib/udev/keymap $name /lib/udev/keymaps/logitech-media-keyboard-elite"
Musisz odpowiednie zmienne sobie wyłapać -- zajrzyj do
udevadm info /dev/input/event*
i posprawdzaj, które urządzenie odpowiada ci za klawiaturę. Potem napisz sobie plik na wzór /lib/udev/keymaps/logitech-media-keyboard-elite :
0xC01BC 216 # 0xD8 # CHAT
ten pierwszy to SCANCODE ten drugi to KEYCODE. KEYCODE może być w postaci decymalnej, hexalnej albo zwykłej nazwy. Info na temat KEYCODE masz w /usr/include/linux/input.h -- wybierasz wolne kody poniżej 255
Jak nie wiesz jaki KEYCODE mają twoje klawisze, odpal evtest:
root:/etc/udev# evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: Logitech Logitech USB Keyboard /dev/input/event1: Logitech Logitech USB Keyboard /dev/input/event2: Power Button /dev/input/event3: Power Button /dev/input/event4: PC Speaker /dev/input/event5: A4Tech USB Mouse /dev/input/event6: ACPI Virtual Keyboard Device Select the device event number [0-6]: 1 Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x46d product 0xc30f version 0x110 Input device name: "Logitech Logitech USB Keyboard" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 113 (KEY_MUTE) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 116 (KEY_POWER) Event code 131 (KEY_UNDO) Event code 138 (KEY_HELP) Event code 140 (KEY_CALC) Event code 142 (KEY_SLEEP) Event code 143 (KEY_WAKEUP) Event code 155 (KEY_MAIL) Event code 156 (KEY_BOOKMARKS) Event code 158 (KEY_BACK) Event code 159 (KEY_FORWARD) Event code 163 (KEY_NEXTSONG) Event code 164 (KEY_PLAYPAUSE) Event code 165 (KEY_PREVIOUSSONG) Event code 166 (KEY_STOPCD) Event code 168 (KEY_REWIND) Event code 171 (KEY_CONFIG) Event code 172 (KEY_HOMEPAGE) Event code 182 (KEY_REDO) Event code 208 (KEY_FASTFORWARD) Event code 210 (KEY_PRINT) Event code 217 (KEY_SEARCH) Event code 234 (KEY_SAVE) Event code 319 (?) Event code 328 (BTN_TOOL_QUINTTAP) Event code 329 (?) Event code 330 (BTN_TOUCH) Event code 331 (BTN_STYLUS) Event code 418 (KEY_ZOOMIN) Event code 419 (KEY_ZOOMOUT) Event code 420 (KEY_ZOOMRESET) Event code 421 (KEY_WORDPROCESSOR) Event code 423 (KEY_SPREADSHEET) Event code 425 (KEY_PRESENTATION) Event code 430 (KEY_MESSENGER) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Properties: Testing ... (interrupt to exit) Event: time 1396653191.923332, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d Event: time 1396653191.923332, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 1 Event: time 1396653191.923332, -------------- SYN_REPORT ------------ Event: time 1396653192.083331, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d Event: time 1396653192.083331, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 0 Event: time 1396653192.083331, -------------- SYN_REPORT ------------
To co ma więcej niż 255 nie będzie wykrywane i trzeba przemapować. A do tego potrzebne SCANCODE , które wyciągniesz przez
# /lib/udev/keymap -i input/event1 Press ESC to finish, or Control-C if this device is not your primary keyboard scan code: 0xC022D key code: zoomin scan code: 0xC022E key code: zoomout
Jak skończysz pisać regułę i plik od mapowania, to dajesz
udevadm control --reload
i powinno działać, eventualnie reset.
fervi -- skróty możesz ustawić na poziomie xservera, co uczyni je globalnymi i odpornymi na zmianę środowiska, zainteresuj się plikiem .xbindkeysrc
Ostatnio edytowany przez morfik (2014-04-05 01:23:11)
Offline
Strony: 1