기능 / 멀티미디어 키에 대한 바로 가기 바인딩 문제


8

배치 스크립트를 바로 가기에 연결하고 싶습니다. 시스템 설정> 키보드> 바로 가기 아래에서 바인딩하면 외부 Apple 키보드의 밝기 키를 제외한 모든 키와 함께 작동합니다.

밝기 키는 키 코드 224225를 사용하여 쇼키에서 인식됩니다 .

xev 출력 :

FocusOut event, serial 41, synthetic NO, window 0x4000001,
mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 41, synthetic NO, window 0x4000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 41, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 

내가 할 수있는 제안이 있습니까?

답변:


6

halevt를 사용한 솔루션

매뉴얼 페이지에 따르면 halevtHAL 이벤트에 대한 일반 핸들러입니다. 더 이상 사용되지 않고로 대체 udev되었지만, 충분히 알지 못 udev하므로 halevt해결책 을 제시 할 것입니다.

편집 : 심각한 땀을 흘린 후에 나는 이것을했습니다 udev. 내 다른 답변을 참조하십시오 .

vim파일을 편집 하는 데 사용 하지만 모르는 경우 또는로 vim바꿀 수 있습니다 .nanogedit

halevt 설치

sudo apt-get update && sudo apt-get install halevt

스크립트에 바인드 할 이벤트 판별 이미 실행중인 디먼을
중지하십시오 halevt.

sudo /etc/init.d/halevt stop

이제 halevt사용하려는 키의 이벤트를 인식 할 수 있는지 확인 하고 리스너를 시작하십시오.

sudo -u halevt halevt -fig:plugdev

이제 스크립트를 바인딩하려는 키보드의 기능 키를 누릅니다. OP가 밝기 키를 작동 시키길 원한다는 것을 알고 있습니다. 밝기 키의 출력은 다음과 같아야합니다.

Condition: /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input,ButtonPressed (brightness-down)
Condition: /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input,ButtonPressed (brightness-up)

brightness-downbrightness-up이벤트가 전송 되었음을 알 수 있습니다 .

이벤트를 스크립트에 바인딩
이제 파일을 편집하십시오 /etc/halevt/halevt.xml.

sudo vim /etc/halevt/halevt.xml

그리고 다음 줄을 추가하십시오 (바로 맨 아래에서 완료했습니다 </halevt:Configuration>).

<halevt:Device match="hal.info.category = input">

    <halevt:Condition name="ButtonPressed" value="brightness-up" exec="sudo /home/user/brightness-script.sh up"/>

    <halevt:Condition name="ButtonPressed" value="brightness-down" exec="sudo /home/user/brightness-script.sh down"/>

</halevt:Device>

물론 value리스너에서 얻은 이벤트와 exec실행하려는 명령으로 변경해야합니다.

명령 또는 스크립트를 할 수있는 halevt 사용자 권한 부여
때문에 halevt데몬으로 실행되어 halevt당신이 당신이에 지정된 일을 할 수있는 권한을 부여 할 사용자를 exec.

실행 ( vim선택한 편집기 로 교체 해야 함)

sudo EDITOR=vim visudo

하단에 다음 줄을 추가하십시오.

halevt ALL=(root) NOPASSWD: /home/user/brightness-script.sh 

저장하고 종료하십시오.

스크립트가 실행 가능한지 확인하십시오

sudo chmod +x /home/user/brightness-script.sh

halevt 데몬을 다시 시작하십시오

sudo /etc/init.d/halevt start

그리고 작동해야합니다!


완벽하게 일했습니다. 정확한 답변에 다시 한번 감사드립니다.
remi

천만에요 .를 사용하여 새 답변 을 참조하십시오 udev. 그러나 다른 솔루션을 자유롭게 고르십시오. 중요한 것은 그것이 작동한다는 것입니다.)
Gerhard Burger

E: Unable to locate package halevt14.04에.
umpirsky

우분투 13.10부터 halevt는 더 이상 포함되지 않습니다 ( packages.ubuntu.com/search?keywords=halevt )
게르하르트 버거

11

udev를 사용한 솔루션

HAL은 더 이상 사용되지 않으며 udev현재 사용 되기 때문에이 접근법은 다른 대답 보다 선호됩니다 (HAL을 사용하는 솔루션이 더 간단하다고 생각하지만).

그러나 많은 기능 키의 경우 시스템 설정> 키보드> 바로 가기 를 사용하여 스크립트를 바인딩하면됩니다. 많은 문제를 해결합니다. 예를 들어 밝기 키가 작동하지 않습니다 (왜 그런지 모르겠습니다). 예를 들어 밝기 키의 동작을 변경하는 방법을 알고 싶다면 계속 읽으십시오.

참고 : Samsung 노트북을 사용하는 경우 http://www.voria.org/forum/ 에서 samsung-tools패키지를 설치하여 모델에 따라 모든 기능 키를 수정할 수 있습니다 .

이 하우투에서는 터미널 사용법을 알고 있다고 가정하고 vim편집기를 사용합니다 . 모르는 경우 vim명령에서 gedit또는로 대체하십시오 nano.


키보드 결정

/lib/udev/findkeyboards

제 경우에는 컴퓨터에 연결된 키보드를 인쇄해야합니다

USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4

이제 두 가지 옵션이 있습니다.

  • USB 키보드 : USB 키보드
    를 다시 매핑하려면 다음을 실행하여 검사하십시오.

    udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
    

    awk 문의 9를 올바른 숫자로 바꿔야합니다. 출력은 다음과 유사해야합니다

    E: ID_MODEL=USB_Receiver
    E: ID_MODEL_ID=c52b
    E: ID_VENDOR=Logitech
    E: ID_VENDOR_ID=046d
    

    이것은 내 키보드가 내 Logitech USB 수신기 (입력 / 이벤트 7이 프로그래밍 가능한 버튼이있는 Logitech G9 마우스로 밝혀 짐)를 통해 처리되었음을 나타냅니다.

  • 랩톱 키보드 : 랩톱 키보드
    를 다시 매핑하려면 AT keyboard내 경우 4 의 숫자를 기억해야합니다 . 랩탑의 dmi 정보도 얻으십시오.

    cat /sys/class/dmi/id/sys_vendor
    

    내 경우에는

    SAMSUNG ELECTRONICS CO., LTD.
    

    cat /sys/class/dmi/id/product_name
    

    내 경우에는

    305U1A
    

기능 키의 현재 매핑 결정

이제 키보드를 들으면서 현재 키매핑을 결정할 수 있습니다 (올바른 숫자 삽입)

sudo /lib/udev/keymap -i input/event4

Esc키보드 또는 다른 키보드에서 Ctrl+ c를 사용하여이 명령을 종료 할 수 있습니다 .

화면이 매우 아래로 스크롤되기 시작하면 EscCtrl+ c를 몇 번 누르고

sudo /lib/udev/keymap -i input/event4 2> /dev/null

또는 여전히 스크롤 문제가있는 경우

sudo /lib/udev/keymap -i input/event4 > ~/keymap.log

마지막 경우에는 여전히 스크롤이 있지만 기능 키를 누르면 ~/keymap.log나중에 읽을 수있는 위치 로 이동해야 합니다.

이제 우리는 당신에게 같은 목록을 제공해야하는 그들를 눌러 기능 키의 현재 매핑을 확인할 수 있습니다 (이것은 내입니다 Fn+ F1를 통해 Fn+이 F12) :

scan code: 0xCE   key code: kpplusminus
scan code: 0x89   key code: brightnessdown
scan code: 0x88   key code: brightnessup
scan code: 0x82   key code: switchvideomode
scan code: 0xF9   key code: f23
scan code: 0xA0   key code: mute
scan code: 0xAE   key code: volumedown
scan code: 0xB0   key code: volumeup
scan code: 0x43   key code: f9
scan code: 0x44   key code: f10
scan code: 0xB3   key code: prog3
scan code: 0x86   key code: wlan

이제 동작을 변경하려는 스캔 코드를 기록해 두십시오.


스캔 코드의 키 코드 변경

키 코드가 키의 예상 사항을 명확하게 다루지 않는 경우 키와 버튼/usr/include/linux/input.h 아래 에서 실제로 원하는 것과 더 일치하는 키 코드가 있는지 확인할 수 있습니다. 키 코드는 형식으로 되어 있으며 소문자로 표시 한 후 부분을 작성해야합니다 . 때때로 이것을 변경하면 문제를 해결하기에 충분합니다.KEY_KEYCODEKEY_

그러나 밝기 키에는 종종 올바른 키 코드가 연결되어 있으며이 키를 다시 매핑 할 수 없습니다. 따라서 다른 키 코드로 변경해야합니다. 우리는 사용 prog1하고 prog2이 내 컴퓨터에서 사용하지 않기 때문에 그러나 당신은 또한 사용할 수 있습니다,이 예제 f13를 통해 f24, 또는 f20를 통해 f24당신이 애플 키보드가있는 경우 F1를 통해 F19키를.

  1. 사용자 정의 키맵
    작성 : 디렉토리 /lib/udev/keymaps에 적절한 이름 으로 키맵 파일을 작성 하고 출력 ls /lib/udev/keymaps을보고 적절한 이름을 찾으십시오 . 나는 custom-brightness이 질문의 목적으로 가고 있습니다.

    sudo vim /lib/udev/keymaps/custom-brightness
    

    변경하려는 키의 스캔 코드와 원하는 스캔 코드를 입력하십시오. 내 custom-brightness모습은 다음과 같습니다.

    # /lib/udev/keymaps/custom-brightness
    
    0x89 prog1
    0x88 prog2
    
  2. 사용자 정의 키 릴리스 파일을 작성하십시오. 랩톱 키보드를 변경 한 경우에만 :
    때때로 키 릴리스 이벤트가 제대로 전송되지 않아 컴퓨터가 중단됩니다. 이를 피하기 위해 사용자 정의 키 릴리스 파일도 작성합니다.

    sudo vim /lib/udev/keymaps/force-release/custom-brightness
    

    이 파일은 동일한 스캔 코드를 포함해야합니다.

    # /lib/udev/keymaps/force-release/custom-brightness
    
    0x89
    0x88
    

새 매핑이 규칙 파일에로드
되었는지 확인 이제 매핑이로드되었는지 확인해야합니다. 편집하여이 작업을 수행 할 수 /lib/udev/rules.d/95-keymap.rules있으므로 백업하는 것이 현명합니다.

다시 두 가지 옵션이 있습니다.

  • USB 키보드 : USB 키보드가
    있으므로 아래에 항목을 추가 LABEL="keyboard_usbcheck"해야하며 키보드 제조업체의 다른 항목이 있어야합니다. 내 키보드가

    E: ID_MODEL=USB_Receiver
    E: ID_MODEL_ID=c52b
    E: ID_VENDOR=Logitech
    E: ID_VENDOR_ID=046d
    

    이미 규칙 중 하나와 일치하고 그렇지 않으면 덮어 씁니다.
    당신은을 변경해야합니다 다음과 같은 규칙을 추가 ID_VENDOR_ID하고 ID_MODEL_ID및 appropiately 당신의 키 맵의 이름을

    ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
    
  • 랩탑 키보드 : 규칙에 따라 랩탑 키보드를보고 한
    경우 , 그렇지 않은 경우 /lib/udev/findkeyboards키보드를 AT keyboard놓습니다 . 다시 랩톱 제조업체의 다른 항목 아래에 넣으십시오. 다음 규칙을 추가하십시오 ( 약간 길어서 와일드 카드를 사용했습니다).LABEL="keyboard_vendorcheck"LABEL="keyboard_modulecheck"SAMSUNG ELECTRONICS CO., LTD.

    ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
    

    이제 /lib/udev/rules.d/95-keyboard-force-release.rules백업 후 규칙을 추가 하십시오.

    sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
    sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
    

    제조업체의 다른 항목에 다시 추가하십시오.

    ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
    

udev가 새 규칙
을로드 하는지 확인 새 규칙 을로드하려면 다음을 실행하십시오.

sudo adevadm trigger

참고 : udevadm control --reload-rules(여전히 많은 웹 사이트에서 지침을 따르십시오) 작동하지 않습니다.

이제 규칙이 성공적으로 적용되었는지 확인하십시오.

sudo /lib/udev/keymap -i input/event4

이제 밝기 키를보고해야합니다.

scan code: 0x89   key code: prog1
scan code: 0x88   key code: prog2

시스템 설정에서 키 다시 매핑
마지막 단계에서 올바른 키 코드가보고되면 키가 자동으로 작동하기 시작합니다 (처음 키 코드가 잘못된 경우).

밝기를 유지하려면 시스템 설정> 키보드> 바로 가기를 사용하여 키를 스크립에 바인딩해야합니다 .

즐겨



참고 사항 :

  • 키에 잘못된 키 코드가 있고이 방법으로 수정 된 경우의 지침을 따르고 /usr/share/doc/udev/README.keymap.txt.gz(를 사용하여 추출하지 않고 열 수 있음 zless) 결과를 이메일 주소로 보내면 다음 릴리스에 변경 사항이 포함될 수 있습니다. 많은 사용자들이 혜택을받을 것입니다!

  • Vaidas Jablonskis 의이 유용한 게시물에 감사드립니다 .


1
$ /lib/udev/findkeyboards bash: /lib/udev/findkeyboards: No such file or directory또한$ /lib/udev/findkeyboards bash: /lib/udev/findkeyboards: No such file or directory
umpirsky

귀하의 의견에 감사드립니다, 나는 그것을 조사하고 udev가 systemd로 병합되고 키 맵 설정이 대신 hwdb에서 관리되는 것처럼 보입니다. bbs.archlinux.org/viewtopic.php?id=168720 에 따르면 이전 버전의 systemd에서 findkeyboards를 추출 할 수 있지만 나머지 답변이 여전히 적용되는지 확신 할 수 없습니다 ...
Gerhard Burger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.