
저는 두 개 이상의 키보드 레이아웃을 사용하고 있는데, 키보드 레이아웃 사이를 전환할 때 스크립트를 실행하는 방법을 찾고 싶습니다.
이것이 가능한가?
지금까지는 다음과 같이 스크립트에 대한 바로가기를 할당할 수 있습니다.
#!/bin/bash
#switch between two layouts (English and Greek in this case)
current_layouts=$(gsettings get org.gnome.libgnomekbd.keyboard layouts)
if [ "$current_layouts" = "us" ]; then
gsettings set org.gnome.libgnomekbd.keyboard layouts "['gr']"
else
gsettings set org.gnome.libgnomekbd.keyboard layouts "['us']"
fi
exec /path/to/another/script
그런데 이 방법을 사용하면 해당 단축키만 사용하여 레이아웃을 전환할 수 있고 상태 메뉴에서 키보드 표시기가 사라지는 점이 불편합니다.
답변1
dconf watch
이벤트 수신기로 사용할 수 있습니다(예: Ubuntu 13.10/14.04).
dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &
답변2
gsettings monitor org.gnome.desktop.input-sources mru-sources \
| xargs -L1 bash -c 'source /path/to/your/script.sh'
답변3
저는 반대로 레이아웃을 변경하는 스크립트를 실행하겠습니다. 이렇게 하면 동일한 스크립트로 원하는 다른 작업을 수행할 수 있습니다. 불행히도 현재 키보드 레이아웃을 찾는 것은 매우 어렵습니다. 나는 다음과 같은 경우에 적합한 접근 방식을 찾지 못했습니다.모두레이아웃 전환 방법. 어떤 이유로 setxkbmap
GUI 단축키를 사용하거나 이를 통해 전환하면 차이가 있습니다.
따라서 내 해결 방법은 항상 setxkbmap
. 호출하는 스크립트가 있고 setxkbmap
쉽게 전환할 수 있도록 해당 스크립트를 데스크탑 환경의 바로가기에 바인딩했습니다. 아래 예는 그리스어 및 미국 레이아웃에 대한 것이므로 설정에 맞게 수정해야 합니다.
#!/usr/bin/env bash
key=`xmodmap -pke | grep -w "59" | awk '{print \$NF}'`
## If this is the "us" layout, that will return "less"
if [ $key == "less" ]; then
setxkbmap gr
## Add other things to be done here
else
setxkbmap us
## Add other things to be done here
fi