이것은 setxkbmap
내 .xinitrc
노트북의 내부 키보드뿐만 아니라 X 서버가 시작될 때 연결된 외부 키보드에서도 작동합니다. 나중에 외부 키보드를 연결하면 기본 US 키맵이 사용됩니다.
내가 연결한 키보드가 내가 원하는 레이아웃을 갖고 있는지 어떻게 확인하나요?
답변1
Gilles가 어제 Dominik R의 답변에 대해 언급했듯이 udev 접근 방식은 루트에서만 작동하며 일반적인 비특권 솔루션으로는 잘 작동하지 않습니다. 나는 데비안에서 inputplug 패키지로 제공되는 Andrew Shadura의 inputplug(1) 사용을 고려해 볼 것을 권장합니다.프로젝트 사이트.
inputplug(1)은 디코딩된 이벤트 매개변수를 인수로 사용하여 스크립트를 호출하는 매우 간단한 XINPUT 이벤트 루프 리스너입니다. 당신이 .xinitrc를 사용하고 있기 때문에 당신은 적당한 창 관리자/환경을 사용하고 있고 이 백그라운드 리스너는 당신에게 매우 간단할 것입니다.
또 다른 가능성은 덜 전통적인 방식으로 udev를 사용하는 것입니다. 즉, "udevadm Monitor"의 출력을 구문 분석하고 일치하는 장치가 연결되어 식별되면 setxkbmap을 호출하는 스크립트를 작성하는 것입니다.
행운을 빌어요!
답변2
inputplug
5년 전에 etherfish가 게시한 것은 좋은 답변이지만 답변에는 완전한 예가 부족합니다. 따라서 이것은 처음에 사용하고 .xinitrc
새 키보드를 연결할 때마다 실행되는 명령입니다.setxkbmap
{ echo "XIDeviceEnabled XISlaveKeyboard"; inputplug -d -c /bin/echo; } |
while read event
do
case $event in
XIDeviceEnabled*XISlaveKeyboard*)
setxkbmap -option grp:switch,grp:shift_toggle,grp_led:scroll us,il ,lyx
setxkbmap -option caps:none
;;
esac
done &
inputplug -d -c /bin/echo
비슷한 메시지를 에코
XIDeviceEnabled 11 XISlaveKeyboard Logitech K270
키보드가 연결될 때마다 while
루프는 그러한 메시지를 찾아 관련 setxkbmap
명령을 실행합니다(제 예에서는 히브리어 키맵을 설정하고 제가 싫어하는 Caps Lock 기능을 제거했습니다). 시작 부분의 추가 부분 echo "XIDeviceEnabled XISlaveKeyboard"
으로 인해 루프는 처음에도 정확히 한 번 "새 키보드"를 찾습니다. inputplug
시작 시 기존 키보드를 인쇄하는 "-0" 옵션도 있지만 일반적으로 여러 키보드를 인쇄하여 setxkbmap
시작 시 불필요하게 여러 번 실행되도록 합니다.