저는 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
동일한 입력에 있는지 확인하십시오. 아래 예에서는 숫자 키가 동일하다고 가정합니다. 고려해야 할 사항:
xkbcomp
Wayland 및 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 수정 방법을 통해.