it-swarm-ko.tech

현재 키보드 레이아웃은 어떻게 얻습니까?

현재 키보드 레이아웃을 반환하는 명령 줄 도구가 있는지 궁금합니다.

XkbLayout을 (를) us, ru.

pdate :setxkbmap는 선택된 레이아웃이 아닌 레이아웃 설정을 반환합니다. 예 :

$ setxkbmap -print | grep xkb_symbols
xkb_symbols   { include "pc+us+ru:2+inet(evdev)+capslock(grouplock)+terminate(ctrl_alt_bksp)"   };

현재 레이아웃이 무엇이든 관계없이 동일한 결과를 반환합니다.

61
Andrew

아마도 버전에 따라 다르지만 setxkbmap 1.3.0을 사용하는 컴퓨터에서는 다음 명령이 작동합니다.

setxkbmap -query | grep layout

필요에 따라 레이아웃 만 아는 것은 소용이 없을 수 있습니다. 예를 들어 미국 레이아웃의 Dvorak 변형은 기본 QWERTY와 상당히 다릅니다. setxkbmap-query 옵션은 다른 필드로 레이아웃과 변형을 모두 제공합니다.

$ setxkbmap -query
rules:      evdev
model:      default
layout:     fr
variant:    bepo
options:    grp:alt_shift_toggle
33
mars

다음과 같이 설명되는 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

21
jasonwryan

그렇습니다 IS 원하는 것을하는 명령 줄 도구! 방금 10 분 전에 발견했습니다.)

여기를보십시오 : https://github.com/nonpop/xkblayout-state

xkblayout-state print "%s"

원하는 것을 정확하게 수행합니다 (줄 끝을 출력하지 않으므로 ; echo 필요한 경우). 도움말 매개 변수없이 도구를 실행하십시오.

14
Pablo Saratxaga

이것을 사용하여 현재 레이아웃의 코드를 얻으십시오.

$(xset -q|grep LED| awk '{ print $10 }')

다음과 같이 원하는 형식으로 변환해야 할 수도 있습니다.

case "$(xset -q|grep LED| awk '{ print $10 }')" in
  "00000002") KBD="English" ;;
  "00001002") KBD="Thai" ;;
  *) KBD="unknown" ;;
esac
11
Pepa

xset -q 명령은 다음과 같습니다.

xset -q | grep -A 0 'LED' | cut -c59-67

00000002 또는 00001002 현재 키보드 레이아웃에 따라 다릅니다.

9
nikospag

최신 시스템에서는 다음을 사용할 수 있습니다

localectl status

예를 들어 다음과 같이 표시됩니다.

System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us
8
oLen

지금까지 답변이 효과가 없었습니다. setkbmap을 영어와 체코 어의 두 레이아웃으로 사용하므로 -print 또는 -query는 항상 두 개를 반환합니다. xset -q의 LED 상태를 잡으면 모든 키보드 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

5
fikovnik

xkbprint를 사용하여 현재 레이아웃을 인쇄 할 수 있습니다.

예를 들어 현재 레이아웃을 PDF

xkbprint -color "${DISPLAY}" - |\
    ps2pdf - > current_keyboard_layout.pdf

어떤 생산 :

xkbprint result

3
Flow

아치 리눅스 포럼의 Goosfrabaa :

setxkbmap -v | awk -F "+" '/symbols/ {print $2}'

여기에서 올바르게 작동하고 us(dvorak-intl) (그놈 키보드 선택 메뉴에서 "USA Dvorak international"으로 표시됨)을 인쇄합니다.

2
l0b0

부분 답변 : KDE에서, qdbus 명령을 통해 현재 키보드 레이아웃을 얻을 수 있습니다.

$ qdbus org.kde.keyboard /Layouts getCurrentLayout
gb(intl)

여러 레이아웃이 구성되어 있지만 현재 사용중인 레이아웃 만 표시합니다.

Kubuntu 18.04 (qdbus 버전 4.8.7)에서 테스트되었습니다. 비 -Qt 환경을위한 다른 d- 버스 기반 솔루션이있을 수 있지만 그에 대해서는 모르겠습니다.

1
Qeole
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e)


keyboardLayout () {
    layout=$(variableInFile "KEYMAP" "/etc/vconsole.conf")
    echo ${layout}
}


variableInFile () {
    variable=${1}
    file=${2}

    source ${file}
    eval value=\$\{${variable}\}
    echo ${value}
}


keyboardLayout
0