現在のキーボードレイアウトを返すコマンドラインツールがあるかどうか疑問に思います。
XkbLayout
に設定しましたus, ru
。
修正する: setxkbmap
選択したレイアウトの代わりにレイアウト設定を返します。たとえば、
$ setxkbmap -print | grep xkb_symbols
xkb_symbols { include "pc+us+ru:2+inet(evdev)+capslock(grouplock)+terminate(ctrl_alt_bksp)" };
現在のレイアウトが何であれ、同じ結果を返します。
答え1
バージョンに関連している可能性がありますが、setxkbmap
1.3.0を使用しているマイコンピュータでは、次のコマンドが機能します。
setxkbmap -query | grep layout
必要に応じてレイアウトを知るだけでは役に立ちません。たとえば、米国レイアウトのDvorakバリアントは、基本QWERTYとはかなり異なります。-query
オプションはsetxkbmap
レイアウトとバリエーションをさまざまなフィールドで提供します。
$ setxkbmap -query
rules: evdev
model: default
layout: fr
variant: bepo
options: grp:alt_shift_toggle
答え2
はい、あなたの要件に合ったコマンドラインツールがあります! 10分前に発見しました:)
ねえ:https://github.com/nonpop/xklayout-state
xkblayout-state print "%s"
必要なものを正確に実行します(行末を出力しないので、必要に応じて追加し; echo
てください)。ヘルプを表示するには、引数なしでツールを実行してください。
答え3
次のように説明されるxkb-switchがあります。
xkb-switchは、XKBレイアウトの状態を照会および変更できるC ++プログラムです。
https://github.com/ierton/xkb-switch
または、nozimicaが提案したように、次のものを使用できます。
setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'
Arch Linuxボードのこのスレッドでは:https://bbs.archlinux.org/viewtopic.php?pid=539406
答え4
これまでの答えは私には適していません。私はsetkbmap
英語とチェコ語のレイアウトの両方を使用しているので、any-print
または-query
は常に両方のレイアウトを返します。 LEDステータスクエリはxset -q
すべてのキーボードLEDのステータスを表示するため、機能しません。
これまでの最良の方法は、次のような小さなユーティリティをすばやく作成することです。 https://gist.github.com/fikovnik/ef428e82a26774280c4fdf8f96ce8eeb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/XKBlib.h>
#include <X11/extensions/XKBrules.h>
int main(int argc, char **argv) {
Display *dpy = XOpenDisplay(NULL);
if (dpy == NULL) {
fprintf(stderr, "Cannot open display\n");
exit(1);
}
XkbStateRec state;
XkbGetState(dpy, XkbUseCoreKbd, &state);
XkbDescPtr desc = XkbGetKeyboard(dpy, XkbAllComponentsMask, XkbUseCoreKbd);
char *group = XGetAtomName(dpy, desc->names->groups[state.group]);
printf("Full name: %s\n", group);
XkbRF_VarDefsRec vd;
XkbRF_GetNamesProp(dpy, NULL, &vd);
char *tok = strtok(vd.layout, ",");
for (int i = 0; i < state.group; i++) {
tok = strtok(NULL, ",");
if (tok == NULL) {
return 1;
}
}
printf("Layout name: %s\n", tok);
return 0;
}
以下を使用してコンパイル
gcc -I/usr/include getxkblayout.c -lX11 -lxkbfile