kbdd_layout을 사용하여 i3blocks에서 짧은 키보드 레이아웃만 표시하는 방법은 무엇입니까?

kbdd_layout을 사용하여 i3blocks에서 짧은 키보드 레이아웃만 표시하는 방법은 무엇입니까?

현재 키보드 레이아웃에 대한 간단한 설명을 표시하고 싶습니다.

현재는 보여줍니다

Layout English (US)

또는

Layout German

EN(US)나는 과 를 선호합니다 DE.

나는 스크립트를 사용합니다kbdd_layout. 문자열이 어떻게 구문 분석되는지 알 수 없었는데 누군가 나를 도와주면 좋을 것 같습니다.

코드를 고려해보세요

#!/usr/bin/env bash
#    

killall kbdd 2>/dev/null
kbdd >/dev/null || exit 1

# Get initial state of layout
N=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService\
    /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout 2>/dev/null |\
    sed -un 's/^.*uint32 //p' )

# In case dbus service wasn't available yet, poll until service is ready
while [[ -z "$N" ]]; do
    sleep .1
    N=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService\
        /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout 2>/dev/null |\
        sed -un 's/^.*uint32 //p' )
done
echo $( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService \
    /ru/gentoo/KbddService ru.gentoo.kbdd.getLayoutName uint32:$N )

# Parse dbus output
dbus-monitor "interface='ru.gentoo.kbdd',member='layoutNameChanged'" |\
sed -un '0~2p' | sed -un 's:.*string "\(.*\)".*:\1:p' | sed -u '/:/d'

답변1

나는 다음을 좋아했습니다(귀하의 필요에 따라 수정됨):

#!/usr/bin/env bash
# 

killall kbdd 2>/dev/null
kbdd >/dev/null || exit 1

# Get initial state of layout
N=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService\
    /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout 2>/dev/null |\
    sed -un 's/^.*uint32 //p' )

# In case dbus service wasn't available yet, poll until service is ready
while [[ -z "$N" ]]; do
    sleep .1
    N=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService\
        /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout 2>/dev/null |\
        sed -un 's/^.*uint32 //p' )
done

dbus-send --print-reply=literal --dest=ru.gentoo.KbddService \
  /ru/gentoo/KbddService ru.gentoo.kbdd.getLayoutName uint32:$N |\
  sed -un 's:.*English.*:EN(US):p;s:.*German.*:DE:p'

# Parse dbus output 
dbus-monitor "interface='ru.gentoo.kbdd',member='layoutNameChanged'" |\
  sed -un 's:.*English.*:EN(US):p;s:.*German.*:DE:p'

레이아웃을 변경할 경우에 대비해 스크립트를 적절하게 조정하는 것을 잊지 마세요.

관련 정보