এখনও পর্যন্ত উত্তরগুলি আমার পক্ষে কার্যকর হয়নি। আমি setkbmap
দুটি লেআউট ইংরাজী এবং চেকের সাথে ব্যবহার করি তাই যে কোনও -print
বা -query
সর্বদা দুটিকে ফিরিয়ে আনব। এর জন্য LED স্থিতিটি গ্রিপিং করা কার্যকর xset -q
হয় না কারণ এটি সমস্ত কীবোর্ডের নেতৃত্বের স্থিতি দেখায়।
এখন পর্যন্ত সবচেয়ে ভালটি ছিল এই ছোট্ট ইউটিলিটিটি দ্রুত লিখে দেওয়া:
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