키보드 레이아웃 간에 전환할 때 스크립트를 어떻게 실행합니까?

키보드 레이아웃 간에 전환할 때 스크립트를 어떻게 실행합니까?

저는 두 개 이상의 키보드 레이아웃을 사용하고 있는데, 키보드 레이아웃 사이를 전환할 때 스크립트를 실행하는 방법을 찾고 싶습니다.

이것이 가능한가?

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

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

관련 정보