키보드 레이아웃 간 전환 시 스크립트를 실행하는 방법

키보드 레이아웃 간 전환 시 스크립트를 실행하는 방법

여러 키보드 레이아웃을 사용하고 있는데 그 레이아웃 사이를 전환할 때 스크립트를 실행하는 방법을 찾고 싶습니다.

가능합니까?

지금까지는 다음과 같이 스크립트에 바로가기를 할당할 수 있습니다.

#!/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

나는 그것을 반대로 하고 레이아웃을 변경하는 스크립트를 실행합니다. 이렇게 하면 동일한 스크립트를 사용하여 원하는 작업을 수행할 수 있습니다. 안타깝게도 현재 키보드 레이아웃을 찾기가 어렵습니다. 효과적인 방법을 찾지 못했습니다.모두레이아웃을 전환하는 방법. 어떤 이유로 setxkbmapGUI 단축키를 사용하면 전환이 달라집니다.

그래서 제 해결 방법은 항상 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

관련 정보