다음 내용이 포함된 ~/.speedswapper라는 파일이 있습니다.
! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
...실행하면 및 키 xmodmap ~/.speedswapper
가 전환됩니다 . 로그인할 때마다 이 키가 전환되도록 ~/.profile에 다음 줄이 있습니다.escCaps Lock
하지만, 외부 USB 키보드를 연결하면 이 설정이 유지되지 않는 것 같습니다. 내 노트북의 키보드는 제대로 작동하지만 외부 키보드가 두 키를 전환하도록 하려면 명령을 다시 실행해야 합니다. 다행스럽게도 이렇게 해도 내 노트북의 키보드에는 영향을 미치지 않는 것 같습니다. 동기화된 것으로 보입니다.
한 가지 해결책은 외부 키보드가 연결되어 있을 때 xmodmap 명령을 실행하는 방법을 찾는 것이지만, 더 강력한 경우 다른 키 교환 솔루션을 사용할 수도 있습니다. 운영체제는 우분투 13.04이다.
justbrowsing의 의견을 보면 udev 규칙을 작성하여 이를 달성할 수 있는 것 같습니다. RUN 옵션을 사용해야 하고 키보드를 연결할 때 장치가 나타나는 /dev/hidraw0 또는 /dev/hidraw1에서 트리거되어야 합니다. .. .하지만 아직 개념을 이해하려고 노력하는 중이므로 udev로 무엇을 하고 있는지 아시는 분의 도움을 주시면 정말 감사하겠습니다.
답변1
에 이 명령이 있으므로 ~/.profile
로그인할 때 한 번만 실행됩니다. 덜 우아한 해결책은 ~/.bashrc
터미널을 열 때마다 명령이 실행되도록 명령을 넣는 것입니다 .
udev
더 나은 해결책은 USB 키보드가 연결될 때 실행되는 규칙을 정의하는 것입니다. xmodmap
(저는 USB 키보드에 대해 반환된 값을 사용하고 있으므로 이 솔루션을 자신에게 맞게 편집해야 합니다.)
USB 키보드 세부정보를 확인하세요. 키보드가 연결된 상태에서 다음 명령을 실행하세요.
$ /lib/udev/findkeyboards | grep USB USB keyboard: input/event6
규칙을 작성하려면
udev
규칙이 무엇과 일치해야 하는지 알아야 합니다. 다음과 같이 항목의 출력을 검색하거나 직접 구문 분석하여udevadm info --export-db
이 정보를 얻을 수 있습니다 .event6
udevadm info --export-db | perl -ne 'BEGIN{$/="\n\n"}print if /event6/'
그러면 우리가 사용할 텍스트를 포함하여 여러 줄의 텍스트가 반환됩니다.
E: ID_MODEL_ID=0002 [...] E: ID_VENDOR_ID=1c4f
udev
X 프로그램을 사용하면 복잡해집니다. 예를 들어,xmodmap
. 어쨌든, 나는 당신의 방법으로 작동하게 할 수 없었기 때문에 내 솔루션을 사용했습니다. 먼저 키 코드를 찾아야 하며 다음을 실행하여 이를 수행할 수 있습니다.$DISPLAY
$XAUTHORITY
keymap
EscCaps Locksudo /lib/udev/keymap -i input/event6
그런 다음 해당 키를 누릅니다. 내 시스템에서는 다음이 반환됩니다.
scan code: 0x70029 key code: esc scan code: 0x70039 key code: capslock
다음 줄을 포함하는 새 키 매핑 규칙을 만듭니다.
0x70029 capslock 0x70039 esc
그리고 다른 이름으로 저장하세요
/lib/udev/keymaps/speedswap
.새
udev
규칙을 정의합니다. 라는 파일을 만들고/etc/udev/rules.d/95-speedswap.rules
다음 줄을 추가합니다.ACTION=="add", SUBSYSTEM=="input", ATTRS{idVendor}=="1c4f", ATTRS{idProduct}=="0002", RUN+="keymap $name speedswap"
적어도 내 시스템에서는 작동해야 합니다. 외부 USB를 연결하면 다음 Esc동작이 발생합니다.Caps Lock그 반대로.