여러 키보드 레이아웃을 사용하고 있는데 그 레이아웃 사이를 전환할 때 스크립트를 실행하는 방법을 찾고 싶습니다.
가능합니까?
지금까지는 다음과 같이 스크립트에 바로가기를 할당할 수 있습니다.
#!/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