Làm thế nào để có được bố trí bàn phím gnome hiện tại từ thiết bị đầu cuối?


13

Để sử dụng trong tập lệnh bash, tôi cần có bố cục bàn phím gnome mà người dùng hiện đang sử dụng. Ví dụ: nếu người dùng đặt bố cục bàn phím của nó thành en-us, tôi cần một lệnh bash in cho tôi cái này.

Làm thế nào tôi có thể nhận được thông tin đó?

Cập nhật:

setxkbmap -querylà không may không làm việc. Dưới đây là thông số với bố trí en(lệnh đầu tiên) và debố trí (lệnh thứ hai) được kích hoạt. Chuyển đổi bố cục bàn phím dường như có một số mối quan hệ với cấu hình phiên gnome

setxkbmap -query 
rules:      evdev
model:      pc105
layout:     us,de
variant:    ,
options:    terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle

setxkbmap -query
rules:      evdev
model:      pc105
layout:     us,de
variant:    ,
options:    terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle

Cập nhật2:

setxkbmap -print #with en-us layout
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)"    };
    xkb_geometry  { include "pc(pc105)" };
};
setxkbmap -print #after switching to german layout
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)"    };
    xkb_geometry  { include "pc(pc105)" };
};

Đáng buồn thay, đó không phải là bash, nhưng sử dụng libxklavier, đây là [ví dụ python] [1] để thực hiện những gì bạn yêu cầu: [1]: cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py
bong bóng

1
<rant> xkb là một địa ngục không có giấy tờ! Những định nghĩa nhiều bố cục không hoạt động đáng tin cậy; đối với tôi, họ đột nhiên chuyển đổi vào các thời điểm ngẫu nhiên và sau khi tạm dừng nó đã được xác định ngẫu nhiên, bố cục nào được xác định có hiệu lực và - điều tồi tệ hơn - độc lập cho mỗi bàn phím được gắn. Có, xkb thực sự có thể có các bố cục khác nhau cho các bàn phím khác nhau nhưng điều này không được ghi lại ở bất cứ nơi nào theo như tôi biết và do đó, điều duy nhất tính năng này làm chúng tôi khó chịu vì chúng tôi không thể kiểm soát nó. xkb, nghiêm túc, đừng bắt tôi phải bắt đầu! </ rant>
Christian

Câu trả lời:


9

Theo một câu hỏi tương tự trên Stackoverflow , sau đây nên thực hiện thủ thuật:

setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'

Tôi không thể xác minh nó, vì hiện tại tôi không có máy * nix nào có sẵn X (Tôi không ở nhà) ...


1
Chạy setxkbmap -print trả về như sau. Tôi không nghĩ rằng điều này sẽ giúp OP. xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
bóng bay

Vì vậy, hiện tại bạn có "chúng tôi" bố trí hoạt động? Đó là những gì tuyên bố trên, với đầu vào của bạn, sẽ tạo ra đầu ra (chỉ có hai chữ cái: "chúng tôi"). Nó trông như thế nào khi bạn chuyển sang một bố cục khác?
Izzy

2
Cảm ơn câu trả lời của bạn. Thật không may đây không phải là lừa. Cả hai lần tôi đều nhận được chúng tôi. Tôi đã chỉnh sửa câu hỏi của tôi để cho bạn thấy ouput.
ftiaronsem

đáng để thử. Bạn có thể cố gắng chỉ định -vtham số (nhiều lần), điều này làm tăng tính dài dòng và do đó cung cấp thêm thông tin. Nên làm việc cho cả hai, -querycũng như -print. Vì tôi không có thiết lập đa cấp, tôi không thể biết liệu nó có cung cấp chi tiết bạn cần hay không - nhưng với -vđầu ra 3 lần ở đây được chia thành "quy tắc được áp dụng" và "sơ đồ bàn phím". Phần sau dường như là thông tin đầy đủ, vì vậy phần đầu tiên có thể có "phần hiện đang hoạt động".
Izzy

cảm ơn một lần nữa, nhưng điều không may là điều này cũng không thành công. Đầu ra tương tự trước và sau khi thay đổi bố cục. Độc lập về tính dài dòng.
ftiaronsem

4

Dành cho Ubuntu 17.10 trở lên

Trong Ubuntu 17.10, với Gnome, giá trị gsinstall hiện tại không thay đổi khi bạn chuyển nguồn đầu vào. Thay vào đó là một MRU-nguồn chủ chốt trong đó liệt kê các m ost r ecently u sed nguồn đầu vào.

$ gsettings get org.gnome.desktop.input-sources mru-sources
[('xkb', 'se'), ('xkb', 'us')]

Nguồn đầu tiên trong danh sách đó là nguồn hiện tại, do đó, một oneliner để có được bố cục hiện tại có thể trông như thế này:

gsettings get org.gnome.desktop.input-sources mru-sources | sed -r "s/\S*\s'([^']+).*/\1/"

Xin lưu ý rằng câu trả lời này không áp dụng nếu bạn sử dụng Unity trên hệ thống Ubuntu 17.10. Với Unity, nó tiếp tục hoạt động như trước đây.


3

Dành cho Ubuntu 13.04 trở xuống

Bạn có thể sử dụng xkblayout-statecông cụ. Xem tệp README.md để biết mô tả, biên dịch, cài đặt và sử dụng.

Lệnh sau sẽ thực hiện chính xác những gì bạn muốn:

xkblayout-state print "%s"

Dành cho Ubuntu 13.10 trở lên

Ubuntu 13.10 đi kèm với một số cải tiến tốt theo nghĩa này và bạn có thể sử dụng chức năng bash đơn giản sau:

get_current_xkblayout () {
      current_input_nr=$(gsettings get org.gnome.desktop.input-sources current | \
          awk '{ print $NF }')
      shift=$(( 2 * ( $current_input_nr + 1 )))
      gsettings get org.gnome.desktop.input-sources sources | tr -d "\',[]()" | \
          awk -v cur="$shift" '{ print $cur }'
}

Các lệnh sau cũng hoạt động trong 13.10:

setxkbmap -query | awk -F"(,|[ ]+)" '/layout:/ { print $2 }'

hoặc là:

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

2

Chỉ cần nhấn Ctrl+ Alt+ Ttrên bàn phím để mở Terminal. Khi nó mở ra, chạy lệnh bên dưới.

setxkbmap -query

Đây là những gì bạn nên thấy

nhập mô tả hình ảnh ở đây


cảm ơn câu trả lời nhanh chóng của bạn, không may điều này không hoạt động. Đây là ouput (lần đầu tiên với bố cục en, lần thứ hai với de):
ftiaronsem

do định dạng được dán dưới dạng chỉnh sửa câu hỏi ...
ftiaronsem

1
cảm ơn một lần nữa vì đã trả lời nhanh chóng Đây là những gì tôi thấy, nhưng nó không cho tôi biết, dù tôi chọn bố cục của người Đức hay người Mỹ. Hay tôi đã bỏ lỡ điều gì?
ftiaronsem

2

Sử dụng thiết bị đầu cuối, tôi đã chạy thử nghiệm thay đổi giữa 'pt' và 'chúng tôi' và sau mỗi thay đổi, tôi đã thu thập bố cục bàn phím được sử dụng thành công:

Nhận bố trí bàn phím hoạt động

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
  • In cấu hình: setxkbmap -print
  • Thu thập dòng quan trọng: grep xkb_symbols
  • nhận được chuỗi sau dấu "+" đầu tiên: awk -F"+" '{print $2}'

Đầu ra có bố cục 'chúng tôi' hoạt động là: us


Swith giữa các bố trí

sudo setxkbmap -option grp:alt_shift_toggle pt

Vượt qua nơi nó đọc 'pt', mã ngôn ngữ để chuyển sang.

nhập mô tả hình ảnh ở đây

Lưu ý: Tôi đang sử dụng Gnome trên Ubuntu 12.04 (Tê tê chính xác)


Cảm ơn câu trả lời của bạn. Vấn đề dường như là người dùng có xu hướng chuyển đổi giữa các bố cục bằng cách sử dụng applet thanh tác vụ. Nó hoạt động nếu một người đang chuyển đổi bố cục từ cmd, nhưng nó không hoạt động, nếu người dùng chuyển đổi với applet thanh tác vụ.
ftiaronsem

@ftiaronsem, Bạn chưa từng đề cập đến phần đó trước đây :) Tôi sẽ xem xét và cập nhật câu trả lời của tôi nếu có thể!
Zuul

0

Dành cho Ubuntu 13.10 trở lên

(Không chắc chắn nếu nó hoạt động trong các phiên bản trước)

current_layout=gsettings get org.gnome.desktop.input-sources current | awk '{print $2}'
gsettings get org.gnome.desktop.input-sources sources | grep -Po "'[[:alpha:]]+'\)" | sed -ne "s/['|)]//g;$(($current_layout+1))p"

Để xem thêm tùy chọn:

gsettings list-recursively org.gnome.desktop.input-sources
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.