교환그리고외부 키보드와 동일

교환그리고외부 키보드와 동일

다음 내용이 포함된 ~/.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 키보드에 대해 반환된 값을 사용하고 있으므로 이 솔루션을 자신에게 맞게 편집해야 합니다.)

  1. USB 키보드 세부정보를 확인하세요. 키보드가 연결된 상태에서 다음 명령을 실행하세요.

    $ /lib/udev/findkeyboards | grep USB
    USB keyboard: input/event6
    
  2. 규칙을 작성하려면 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
    
  3. udevX 프로그램을 사용하면 복잡해집니다. 예를 들어, xmodmap. 어쨌든, 나는 당신의 방법으로 작동하게 할 수 없었기 때문에 내 솔루션을 사용했습니다. 먼저 키 코드를 찾아야 하며 다음을 실행하여 이를 수행할 수 있습니다.$DISPLAY$XAUTHORITYkeymapEscCaps Lock

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

    그런 다음 해당 키를 누릅니다. 내 시스템에서는 다음이 반환됩니다.

    scan code: 0x70029   key code: esc
    scan code: 0x70039   key code: capslock
    
  4. 다음 줄을 포함하는 새 키 매핑 규칙을 만듭니다.

    0x70029 capslock
    0x70039 esc
    

    그리고 다른 이름으로 저장하세요 /lib/udev/keymaps/speedswap.

  5. 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그 반대로.

관련 정보