키 코드는 적절한 조치에 어떻게 매핑됩니까?


18

를 사용하여 스캔 코드와 키 코드의 매핑을 변경하는 방법을 알아 낸 후이 질문을udev 참조하십시오. 키 코드 (또는 이벤트 인 경우)가 적절한 동작에 어떻게 매핑되는지 궁금합니다.

예를 들어, volume up키보드 를 누르면 스캔 코드가 전송되어 volumeup키 코드 로 변환됩니다 . 그러나이 키 코드는 어떻게 가로 채지고 볼륨이 올라가며 적절한 알림이 표시됩니까?

내 생각에 스크립트를 호출 해야하는 곳이 있으므로 해당 스크립트의 위치를 ​​알고 싶습니다.

편집 : 내가 언급 한 키 코드 xev는 키 코드 반환 과 혼동하지 않아야 하지만 그에 관심이 있습니다.)


3
예를 들어 알림이 Ubuntu에 매우 구체적이므로 동의하지 않으므로 알림을 보낸 방법 을 알고 싶습니다 . 내 생각에 스크립트를 호출 해야하는 곳이 있으므로 해당 스크립트가 어디에 있는지 알고 싶습니다.
Gerhard Burger

2
이것은 우분투가 이것을 처리하는 방식이 IIRC 년으로 바뀌 었으므로 유효한 우분투 관련 질문입니다. 적절한 동작을 트리거하는 핫키를 누르면 이벤트에서 우분투의 이벤트 순서가 무엇인지 아는 것이 매우 흥미 롭습니다. 가능한 목적 : 사용자 정의 밝기 조절 , 핫 키 등 문제 디버깅
gertvdijk을

2
@Seth는 오래된 것 같습니다. HAL은 10.04부터 오래 전에 사용되지 않습니다 . 또한 데스크톱 알림이 어떻게 트리거되는지에 대한 정보가 부족합니다.
gertvdijk

1
오늘 나는 wiki.ubuntu.com/Hotkeys/Troubleshooting보았습니다 .이 포인터는 멋진 포인터를 제공합니다 ( wiki.ubuntu.com/Hotkeys/Architecture에 대한 링크 가 매우 유익합니다). 나는 Stephen Ostermiller의 대답이 올바른 방향이라고 생각하지만, 나는 그 대본들을 찾아서 바꿀 수 있기를 원합니다;)
Gerhard Burger

1
^^이 정보는 구식이며 gnome-settings-daemon 아래에 키 바인딩이없는 것 같습니다 ... compiz 섹션에서 밝기에 대한 많은 히트가 있습니다 (단결을 추측하고 있습니까?) 누가 어떻게 notify-osd작동 하는지 알고 있습니까? 나는 밝기 알림 ... 전송을하고 있는지의 생각
게르하르트 버거

답변:


6

좋아, https://help.ubuntu.com/community/MultimediaKeys 에서 찾았습니다.

키보드에서 키를 누르면, 리눅스 커널은 원시 스캔 코드를 생성합니다 (할당 된 경우). 각 스캔 코드는 키 코드에 매핑 될 수 있습니다. 이것은 커널 수준입니다. X는 (키) 총 독립적 인 키 매핑 방법을 가지고 있습니다 : X는 시작할 때 커널 키 코드 테이블을 읽은 다음 키 코드를 독립적 인 키 코드 테이블에 매핑합니다 (커널 키 코드와 동일하지만 다릅니다). 그런 다음 각 키 코드를 키심, 즉 키를 나타내거나 동작을 제안하는 문자열에 매핑 할 수 있습니다. 따라서 키가 완전히 작동하려면 커널 스캔 코드 / 키 코드와 X 키 코드 / 키 심이 필요합니다. 이상하게 보일지 모르지만 X 개발자는 커널과 별도의 키보드 매핑을 유지해야 할 이유가 있습니다. 전혀 어렵지 않고 아주 지루한 절차입니다.

따라서 키 코드는 키심에 매핑되므로 키 심은 어디에 있습니까? 나는이 질문에서 발견하고 대답합니다 : 요즘 모든 X 키심 목록을 어디서 찾을 수 있습니까? 우리는 볼륨 키에 대해 이야기하기 때문에 XF86keysym.h대답에서 언급 한 소스 코드에서 찾을 수 있습니다 .

내 컴퓨터의 파일에서 볼륨에 대해 다음을 발견했습니다.

#define XF86XK_AudioLowerVolume 0x1008FF11   /* Volume control down        */
#define XF86XK_AudioMute    0x1008FF12   /* Mute sound from the system */
#define XF86XK_AudioRaiseVolume 0x1008FF13   /* Volume control up          */

이상한 ... 다른 것과 다른 값, 키 처리를위한 여러 시스템이 있습니까? http://crunchbang.org/forums/viewtopic.php?id=16656


Xubuntu를 사용하고 있으며 키를 제어하려면 조치를 수동으로 맵핑해야합니다 (이와 같이 xubuntu에서 키보드 단축키를 어떻게 변경합니까? ). 그러나 알림은 키 누름을 선택하고 그에 따라 작동하는 것처럼 독립적으로 보입니다. 우분투의 다른 프로그램이 이런 식으로 설정되어 스크립트를 키에 매핑 할 필요가 없음을 의미 할 수 있습니다.

따라서 프로그램이 이제 키를 집어 들고 있다고 확신합니다 (따라서 스크립을 찾을 수 없음).

Xubuntu에서는 Pulse Audio에서이 문제가 있었고 볼륨을 변경하기 위해 사용자 지정 스크립트를 사용했습니다. Pulse가 Mute 키를 차단하고 Mute 키는 Alsa 및 PulseAudio를 음소거 하는 것처럼 보였지만 Alsa 만 흥미로운 해결 방법으로 음소거를 해제했습니다 .


NotifyOSD에 대해 확인하십시오 https://wiki.ubuntu.com/NotifyOSD#Volume_changes

다음 다이어그램을 보면 : https://wiki.ubuntu.com/NotifyOSD#Architecture

특히 이것 하나 : 여기에 이미지 설명을 입력하십시오

DBus 또는 HAL 양식을 수신하는 "하드웨어 키 리스너"가 있음을 나타냅니다. 그런 다음 사운드 및 밝기 아이콘이 Notify-OSD의 소스에있는 "시스템에서 시각적 요소를 검색"하여 거품을 만듭니다.


이것은 모두 혼란 스럽지만 내가 이해하는 한 (지금까지) :

원시 스캔 코드 (예 : e016)> 키 코드 (예 : 160)> keysym (예 : XF86AudioMute)> 그놈 설정 데몬 (예 : 볼륨 높이기)> DBus 신호> 알림 OS (또는 기타)의 하드웨어 키 수신기 프로그램 청취)


이것이 어딘가에 가고있는 것 같습니다! 처음부터 CW로 표시되어 여전히 개선되고 있다고 생각하십니까? :)
gertvdijk

그래, 좀 더 살펴볼 필요가있다. 다이어그램에는 많은 물음표가있다.
Mateo

그런데 실수로 커뮤니티 위키 답변으로 만들었습니까? 어쩌면 mod에게 그것을 취소 해달라고 부탁하십시오 ... 오 그리고 그 그래프는 HAL이 오랫동안 사용되지 않기 때문에 아마도 구식 일 것입니다 ... 적어도 우리는 어딘가에 도착하고 있습니다 : D
Gerhard Burger


내가 아는 @gertvdijk하지만 그가 놓칠거야 모든 upvotes에 대한 부끄러운 것)
게르하르트 버거

1

대부분의 경우 실행되는 스크립트가 없습니다. 이벤트가 창 관리자 또는 설정 디먼으로 전송됩니다. 프로세스에서 스크립팅을 알고있는 유일한 시간은 사용자 정의 키 바인딩을 구성 할 때입니다. 사용자 정의 키 바인딩의 경우 명령 행 (실행 파일 또는 스크립트)을 추가하고 키에 바인드 할 수 있습니다.

우분투에서 키 바인딩 백업에 대한 질문에 쓴이 답변을 참조하십시오 : 그놈 키보드 단축키는 어디에 저장됩니까? 사용자 정의 키 바인딩을 포함하여 모든 키 바인딩을 백업하거나 복원하는 스크립트가 있습니다. 스크립트를 실행하면 dconf에서 키 바인딩이 저장된 위치와 키 이벤트에 대한 알림을받는 응용 프로그램을 볼 수 있습니다.


그러면 데스크톱 알림이 어떻게 트리거됩니까?
Gerhard Burger

나는 그놈 설정 데몬이 예를 들어 볼륨과 밝기의 경우를 트리거하는 책임이 있다고 생각합니다.
Stephen Ostermiller

2
스크립트를 실행했지만 시스템 설정> 키보드> 바로 가기를 사용하여 액세스 할 수있는 바로 가기를 얻는 것 같습니다 . 예를 들어 밝기에 대한 참조를 찾지 못했습니다.
게르하르트 버거

shoutcut 키를 얻기위한 멋진 스크립트.
Mateo

0

답은 드라이버 와 관련이 있습니다.

운영 체제와 상호 작용하려면 모든 하드웨어에 드라이버가 있어야합니다.

인용 http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :

드라이버 는 명령에 따라 엔터티를 구동, 관리, 제어, 지시 및 모니터링합니다 . 버스 드라이버가 버스로하는 것, 장치 드라이버는 마우스, 키보드, 모니터, 하드 디스크, 웹 카메라, 시계 등과 같은 컴퓨터 장치 (컴퓨터에 연결된 모든 하드웨어)로 수행합니다.

또한, "파일럿"은 개인 또는 개인에 의해 모니터링되는 자동 시스템 (예를 들어, 여객기의 자동 조종 시스템) 일 수있다. 유사하게, 특정 하드웨어는 소프트웨어 (장치 드라이버)에 의해 제어되거나 다른 하드웨어 장치에 의해 제어되어 소프트웨어 장치 드라이버에 의해 관리 될 수있다. 후자의 경우, 이러한 제어 장치는 일반적으로 장치 제어기 라 불린다. 이것은 장치 자체이기 때문에 종종 버스 드라이버라고하는 드라이버가 필요합니다.

장치에는 제어 / 상태 비트 및 데이터 비트를 저장하는 장치 레지스터가 있습니다. 일부 데이터를 전송해야 할 때마다 일반적으로 데이터 비트를 설정하여 전송됩니다.

따라서 키보드에서 일부 키를 누를 때마다 일부 데이터가 레지스터에 기록됩니다. 이러한 비트는 장치 드라이버에서 읽히고 적절한 조치가 수행됩니다. 이것은 짧은 설명입니다.

연결:


3
음 ... 드라이버가 실제로 키보드에서 누르는 키 의 의미 에 대한 개념 이 없다고 생각 합니다. 노트북의 일부 특수 핫키 장치에는이를위한 드라이버가 필요할 수 있지만 "볼륨 업"과 같은 일반 멀티미디어 핫키에는 적용되지 않습니다. 이것은 커널 / X / DE의보다 일반적인 영역에서 다루어 져야합니다. 또한 Linux 커너 장치 드라이버 프로그래밍에 대한 참조가 매우 광범위하다고 생각합니다.
gertvdijk 2013

우분투가 사용하는 가장 현대적인 키보드에 대한 생각 evdev드라이버를,하지만 난 그 ... 여기에 도움이 될 것입니다 표시되지 않습니다
게르하르트 버거
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.