Tập lệnh chuyển đổi setxkbmap


8

Tôi muốn một tập lệnh bash chuyển đổi giữa: setxkbmap sesetxkbmap us.

Sau đó, ý định của tôi là ánh xạ tập lệnh đó CtrlEscthông qua Bàn phím> phím tắt tùy chỉnh.

Vấn đề là tôi muốn chuyển đổi bố trí bàn phím với CtrlEscape. Làm thế nào tôi có thể thực hiện điều đó?


1
Bạn sử dụng DE gì?
hoa cúc

3
XKB có thể thiết lập một phím để chuyển giữa các bố cục. Đây không phải là thứ bạn muốn viết, nhưng có lẽ có một cấu hình được nấu sẵn cho nó ở đâu đó mà bạn chỉ cần chọn cặp bố cục nào và tổ hợp phím nào bạn thích.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


3

Tôi không biết Môi trường máy tính để bàn nào bạn đang chạy, cách bạn gán phím tắt có thể khác nhau, nhưng tập lệnh này hoạt động trên toàn cầu, ít nhất là trên Ubuntu 12.04 boxArch Linux:

#!/bin/bash

(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us

Thật không may, điều này không hoạt động nếu bạn thay đổi bố cục bằng phương pháp gui. Ít nhất, nó không có trên hộp xfce của tôi. Nó chỉ hoạt động nếu bạn sử dụng setxkbmap để chuyển bố cục. Cách duy nhất tôi thấy rằng luôn luôn, hoạt động nhất quán là phân tích cú pháp xmodmapnhư trong câu trả lời của tôi dưới đây.
terdon

@terdon nó hoạt động ít nhất trên hộp Ubuntu 12.04 của tôi, bạn đã thử nó trên hệ thống của mình chưa?
hoa cúc

Vâng, tin tôi đi, tôi đã mất một thời gian dài để xử lý vấn đề kiểu này. Tôi thường xuyên chuyển đổi giữa 3 bố cục bàn phím (chúng tôi, fr, es) và giữa hai bàn phím vật lý, một với bố cục Hoa Kỳ và một với tiếng Tây Ban Nha. Nếu tôi sử dụng applet trên bảng điều khiển tint2 của mình để thay đổi bố cục bàn phím, thì không có sự khác biệt nào ở đầu ra setxkbmap. Tương tự như vậy nếu tôi chuyển đổi bố cục bằng cách sử dụng phím tắt được thiết lập thông qua keyboard shortcutsGUI trên LMDE của tôi. setxkbmapchỉ thay đổi khi tôi chuyển đổi sử dụng nó.
terdon

Thực sự gọn gàng với giải pháp một dòng. Cảm ơn.
Fredrik

Điều cuối cùng tôi làm là lưu dòng vào tệp .sh trong thư mục nhà của tôi. Sau đó ánh xạ ./toggleLayout.sh sang ctrl-esc
Fredrik

4

Có nhiều câu trả lời cho các câu hỏi tương tự . Tuy nhiên, không ai trong số họ làm việc mạnh mẽ cho tôi.

Kịch bản sau đây sẽ hoạt động trong mọi trường hợp. Nó chắc chắn hoạt động trên hệ thống debian của tôi khi chuyển đổi bố cục với setxkbmap:

#!/bin/bash
seven=`xmodmap -pke | grep "keycode  16" | awk '{print \$5}'` 
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
    setxkbmap se
else
  setxkbmap us
fi

Kịch bản phân tích cú pháp đầu ra của xmodmap để xem bố cục hiện tại là "chúng tôi" hay "se". Trong bố cục "chúng tôi", SHIFT+ 7được ánh xạ thành "dấu và". Nếu bạn sẽ chỉ chuyển đổi giữa bố cục "chúng tôi" và "se", có "dấu" và 7nghĩa là bạn đang sử dụng bố cục "chúng tôi" và tập lệnh sẽ thay đổi thành "se". Nếu bạn không bật "ampersand" 7, tập lệnh sẽ chuyển sang "chúng tôi".


4

cách tốt nhất là không sử dụng tập lệnh mà tải một bàn phím hai lớp (ví dụ setxmodmap "us,se":) và xác định lại Ctrl- Escđể gửi ISO_Next_group

Xem câu trả lời này trên xkb để biết cách xác định lại một số khóa mà không cần chỉnh sửa các tệp mặc định chính (do đó, không cần phải root). Trong tệp ký hiệu cục bộ (ví dụ ~/.xkb/symbols/mysymbols:) đặt một phần nhỏ là:

partial modifier_keys 
xkb_symbols "ctrl_esc_toggle" {
    key <ESC> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Escape,     ISO_Next_Group ]
    };
};

PC_CONTROL_LEVEL2 cho biết biểu tượng sencond cho khóa đó được lấy bằng Control (thay vì Shift).

và trong tệp sơ đồ bàn phím cục bộ (ví dụ : ~/.xkb/keymap/mykbd; bạn có thể tạo nó bằng setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd) thay đổi dòng xkb_symbols để thêm "mysymbols (ctr_esc_toggle)" để bạn sẽ có đôi khi như:

xkb_symbols   { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)"   };

(lưu ý "se: 2", ": 2" cho biết tải các định nghĩa ký hiệu "se" là Nhóm2; bạn có thể xếp các nhóm khác nhau).

bây giờ bạn có thể tải nó bằng: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY sau đó Ctrl-Esc sẽ chuyển đổi giữa bố cục "chúng tôi" và "se".

LƯU Ý tuy nhiên bạn cần nhấn Ctrl (và giữ) trước Esc; theo cách khác nó không hoạt động (nó sẽ yêu cầu xác định một công cụ sửa đổi ảo cho Escape và tôi không biết làm thế nào để làm điều đó)


1
Làm thế nào sẽ leftwin+leftalt+spacetrông như thế nào?
Hotschke 2/12/2015

@Hotschke, cảm ơn{ include "pc+us+ru:2+inet(evdev)+group(win_space_toggle)" };
đóng góp
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.