USB n키 플립 키보드를 사용하여 XF86Switch_VT_1(control+alt+f1)을 통해 Xorg에서 Linux 터미널로 전환하는 방법은 무엇입니까?

USB n키 플립 키보드를 사용하여 XF86Switch_VT_1(control+alt+f1)을 통해 Xorg에서 Linux 터미널로 전환하는 방법은 무엇입니까?

저는 N키 롤오버 기능이 있는 멋진 새 USB 키보드를 휴일 동안 구입했습니다. 저를 괴롭혔던 한 가지는 더 이상 이 키보드를 사용하여 X11/Xorg에서 가상 키보드에 액세스할 수 없다는 것입니다. 기존 키보드와 새 키보드를 모두 연결한 후에도 여전히 기존 키보드를 사용하여 터미널로 전환할 수 있는 것을 볼 수 있습니다. 또한 xev를 사용하여 XF86Switch_VT_1 키 기호가 생성되고 있는지 확인할 수 있습니다. (아래 참조). 내가 다른 곳에서 읽은 바에 따르면, USB 표준은 키보드당 6개의 키 롤오버만 허용하기 때문에 키보드가 USB를 통해 여러 키보드인 척해야 하는 데서 문제가 발생합니다.

이 작업을 수행하는 알려진 해결 방법이 있습니까?

KeyRelease event, serial 40, synthetic NO, window 0x5000001,
    root 0x29e, subw 0x0, time 5626057, (675,-26), root:(679,936),
    state 0xc, keycode 67 (keysym 0x1008fe01, XF86Switch_VT_1), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

답변1

DELL 노트북에도 같은 문제가 있습니다

이 시도:

Ctrl + Alt + [n] + F1

답변2

XKB 해결 방법

F#는 키와 다른 논리적 장치에 나타나므로 Ctrl+AltXKB 레이아웃을 변경하여 일부 일반 키에 이러한 키 기호를 생성하는 것이 합리적인 해결 방법일 수 있습니다. 키를 테스트하여 evdev동일한 입력에 있는지 확인하십시오. 아래 예에서는 숫자 키가 동일하다고 가정합니다. 고려해야 할 사항:

  • xkbcompWayland 및 GNOME 기반 데스크탑 환경에서는 작동하지 않습니다.키보드 설정을 재설정할 수 있음이므로 테스트를 위해 기본 창 관리자를 사용하십시오. 이 솔루션이 작동하면 XKB 옵션이나 레이아웃 변형으로 다시 작성하고, 시스템 XKB 데이터베이스에 넣고, DE가 제공하는 모든 수단을 통해 구성할 수 있습니다.

  • 이러한 변경 사항을 사용하여 콘솔 키맵을 생성할 수도 있고 , 콘솔이 정상적으로 작동하고 수정이 필요하지 않은 ckbcomp것을 확인할 수도 있습니다 . Ctrl+F2아니면 과의 관계를 구축해야 할 수도 있습니다 loadkeys.

  • 일부 응용 프로그램에는 이미 정의된 단축키가 있을 수 있습니다. 예를 들어 Ctrl+Alt+2이 레이아웃과 어떻게 상호 작용하는지 모르겠습니다.

이러한 모든 요소를 ​​고려하면 이것은 확실히못생긴 해커. 더 낮은 수준에서 문제를 해결하는 것(예: evdev두 개의 입력을 실행하기 전에 하나로 병합)이 더 나은 선택이 될 것입니다.


먼저, 다음을 사용하여 기본 키맵을 생성합니다 setxkbmap -print. 그런 다음 이 파일을 편집하고 이에 재정의를 추가하고 마지막으로 다음을 사용하여 변경된 키맵을 로드합니다 xkbcomp [file] $DISPLAY.

$ setxkbmap -print > mykeymap.xkb
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us(altgr-intl)+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

xkbcomp레이아웃에서 원래 기호를 찾으 려면 완전한 키맵을 생성하세요 . 레이아웃의 기호가 약간 다른 경우에는 레벨 4 이하이면 작동하므로 너무 걱정하지 마십시오.

$ xkbcomp $DISPLAY - > origkeymap.xkb
#         (from)  (to)

// the # keys on a typical PC keyboard are AE01,AE02,...,AE09,AE10
// in the xkb_symbols section you'll find these:
    key <AE01> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [ 1, exclam, onesuperior, exclamdown ]
    };

이제 mykeymap.xkb필요한 재정의를 편집하고 넣으세요.

// Attempting to place XF86Switch_VT_N keysyms on 1-0.
//
// starting point: setxkbmap -layout us -variant altgr-intl -option '' -print
// load this file: xkbcomp mykeymap.xkb $DISPLAY
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"      };
    xkb_compat    { include "complete"      };
    xkb_symbols   { 
        include "pc"
        include "us(altgr-intl)"
        include "inet(evdev)"

        // redefine numeric keys
        key <AE01> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 1, exclam, onesuperior, exclamdown, XF86Switch_VT_1 ]
        };
        key <AE02> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 2, at, twosuperior, dead_doubleacute, XF86Switch_VT_2 ]
        };
        key <AE03> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 3, numbersign, threesuperior, dead_macron, XF86Switch_VT_3 ]
        };
        key <AE04> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 4, dollar, currency, sterling, XF86Switch_VT_4 ]
        };
        key <AE05> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 5, percent, EuroSign, dead_cedilla, XF86Switch_VT_5 ]
        };
        key <AE06> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 6, asciicircum, dead_circumflex, onequarter, XF86Switch_VT_6 ]
        };
        key <AE07> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 7, ampersand, dead_horn, onehalf, XF86Switch_VT_7 ]
        };
        key <AE08> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 8, asterisk, dead_ogonek, threequarters, XF86Switch_VT_8 ]
        };
        key <AE09> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 9, parenleft, leftsinglequotemark, dead_breve, XF86Switch_VT_9 ]
        };
        key <AE10> {
            type= "CTRL+ALT",
            symbols[Group1]= [ 0, parenright, rightsinglequotemark, dead_abovering, XF86Switch_VT_10 ]
        };

    };
    xkb_geometry  { include "pc(pc105)"     };
};

이제 이 파일을 로드하고 키를 테스트할 수 있습니다.

# load keymap for all keyboards
$ xkbcomp mykeymap.xkb $DISPLAY

# load only on device id=# (see `xinput -list`)
$ xkbcomp -i # mykeymap.xkb $DISPLAY

콘솔 키맵은 변경되지 않으므로 다시 전환하려면 다른 키보드가 필요할 수 있습니다.

테스트 결과 키가 작동하고 다른 키 조합 사용에 영향을 주지 않는 것으로 나타나면 영구적으로 남겨 둘 수 있습니다.선호하는 XKB 수정 방법을 통해.

관련 정보