모든 배포판의 명령줄에서 현재 키보드 레이아웃을 얻는 방법은 무엇입니까? 가능합니까?
예를 들어, xset -q | grep LED | awk '{ print $10; }'
로컬에서 다른 키보드 레이아웃을 사용하면 다른 출력이 표시되지만 다른 사람들에게 물어보니 레이아웃이 변경되더라도 동일한 출력이 표시된다는 것을 알게 되었습니다. 가능합니까, 아니면 그들이 뭔가 잘못하고 있습니까? 현재 정확한 키보드 레이아웃을 얻는 명확하고 올바른 방법이 있습니까?
주제를 시작했어요여기, 그러나 솔루션이 분포에 따라 달라지는 것은 분명합니다. 여기에서 제가 이것을 얻기 위해 많은 변형을 시도했지만 아무 것도 xset
작동하지 않는다는 것을 알 수 있습니다.
그런데 각 배포판에 어떤 명령을 사용하시겠습니까? 예를 들어, 배포를 기반으로 현재 키보드 레이아웃을 얻기 위해 실행하는 스크립트에서. 또는 어떤 명령이 출력됩니까?현재의Fedora, KDE Neon, Ubuntu, Debian, Arch 또는 Gentoo 등의 레이아웃을 전환하시겠습니까?
답변1
해결책을 찾지 못한 이유는 해결책이 없기 때문입니다. "US QWERTY 레이아웃"과 같은 것을 의미하는 경우 "현재 키보드 레이아웃"과 같은 것은 없습니다. 키보드 레이아웃은 미리 정의된 특정 레이아웃일 필요는 없습니다. 이를 명시적으로 설명하는 유일한 방법은 전체 매핑 세트( 를 사용할 수 있음 xkbcomp :0 -
)를 덤프하는 것입니다.
이 구성 인터페이스 또는 해당 구성 인터페이스에서 어떤 레이아웃이 구성되어 있는지 확인할 수 있습니다. 이 모든 정보는 해당 특정 인터페이스에 어떤 레이아웃이 구성되어 있는지 알려줍니다. 이 레이아웃이 최신인지 여부는 알려주지 않습니다. 사용자는 레이아웃을 변경하기 위해 다른 인터페이스를 사용했을 수도 있고, xmodmap
와 같은 도구를 사용하여 완전히 사용자 정의된 키맵을 설정했을 수도 있습니다 xkbcomp
.
당신이 얻는 결과 setxkbmap -query
는 가능한 한 가깝습니다. X 서버에서 정보를 가져오므로 적용 여부에 관계없이 프로필에 문제가 없습니다. 그러나 X 서버에 키보드 레이아웃을 변경하도록 지시하는 방법에는 레이아웃 이름(및 옵션)을 제공하거나 개별 키를 설정하는 두 가지 방법이 있습니다. setxkbmap -query
라고 표시 되면 us
누군가가 마지막으로 X 서버에 특정 레이아웃을 로드하도록 성공적으로 요청했을 때 요청이 해당 us
레이아웃을 로드하는 것이었음을 의미합니다. 그러나 개별 키의 구성을 변경하라는 후속 요청이 이루어진 경우 이제 레이아웃이 완전히 다르게 보일 수 있습니다.
누구도 잘못을 저지르지 않습니다. 키보드 레이아웃이 반드시 미리 정의된 레이아웃은 아니기 때문에 "현재 레이아웃"이라는 개념이 일반적으로 시스템에 존재하지 않는다는 것입니다.
답변2
이는 배포판보다는 현재 창 관리자에 더 많이 의존하는 것 같습니다.그놈에서(아마도 dconf 데이터베이스(GNOME, MATE/GNOME2, XFCE, Unity)를 사용하는 모든 배포판에서) 반환된 배열의 첫 번째 요소에서 현재 레이아웃을 얻을 수 있습니다
gsettings get org.gnome.desktop.input-sources mru-sources
아마도 모든 distro/WM 스크립트가 시작되는 곳일 것입니다. 기반으로 wmctrl -m
스위치를 사용할 수 있습니다.EWMH/NetWM 호환 X Window Manager(예: Enlightenment, icewm, kwin, Metacity 및 sawfish 포함).
관련 정보
그래프 차트 가져오기나는 다음 별칭을 사용합니다.
alias current_keyboard_layout_chart=$'gkbd-keyboard-display -l $(localectl status | awk \'/X11 Layout/ {print $3}\')$\'\t\'$(localectl status | awk \'/X11 Variant/ {print $3}\')'
-
xkbprint -color "${DISPLAY}" - | ps2pdf - > current_keyboard_layout.pdf
-
# systemd localectl status # GNOME gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.id" # KDE qdbus org.kde.keyboard /Layouts getCurrentLayout # x11-xkb-utils (old) setxkbmap -query; setxkbmap -print
답변3
Linux의 DE 환경은 너무 다양해서 적합한 단일 솔루션을 찾을 수 없을 것 같습니다.
KDE Neon, Ubuntu, Debian, Arch 또는 Gentoo 등을 위한 Fedora?
그러나 "현재 키보드 레이아웃"이 GNOME Shell 사용자 세션의 현재 키보드 레이아웃을 검색하는 것을 의미하는 경우 적합한 솔루션이 있을 수 있습니다.슈리크(또한 @GitHub:미치광이/shyriiwook). 이것은 GNOME Shell 확장이며 제가 그 작성자입니다.
이것은 매우 간단하고 최소한의 확장입니다. GUI가 없습니다. 일단 설치되면 새로운 D-Bus 인터페이스가 그놈 쉘 세션에 노출됩니다. 현재 구성을 쿼리하거나 원하는 레이아웃을 활성화하는 메서드를 호출할 수 있습니다.
$ gdbus introspect \
--session \
--dest org.gnome.Shell \
--object-path /me/madhead/Shyriiwook \
--only-properties
node /me/madhead/Shyriiwook {
interface me.madhead.Shyriiwook {
properties:
readonly as availableLayouts = ['us', 'de', 'jp'];
readonly s currentLayout = 'us';
};
};
$ gdbus call \
--session \
--dest org.gnome.Shell \
--object-path /me/madhead/Shyriiwook \
--method me.madhead.Shyriiwook.activate "de"