Làm thế nào để ánh xạ lại vĩnh viễn khóa mũ để thoát trong X11?


9

Tôi muốn ánh xạ lại khóa mũ để thoát trong X11 (tức là nhấn nút khóa mũ vật lý sẽ được hiểu là esc bởi các ứng dụng và hành vi của esc sẽ không thay đổi). Các giải pháp phải tồn tại một khởi động lại X . xmodmap và setxkbmap là các giải pháp chấp nhận được (như các chương trình tương tự). Tôi không muốn đối phó với GUI, vì tôi muốn giải pháp có thể mang theo được và là một phần của dotfiles của tôi. Nếu tôi đang thiếu một giải pháp tốt hơn / dễ dàng hơn / rõ ràng hơn, xin vui lòng cho tôi biết, mặc dù lưu ý rằng tôi không sử dụng DE (dùng thử i3wm).

Cho đến nay tôi đã thử sử dụng xmodmap và setxkbmap với rất ít thành công.

Đây là nỗ lực của tôi trong việc sử dụng xmodmap:

# ~/.xinitrc
xmodmap ~/.xmodmap

# ~/.xmodmap
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Chạy $ xmodmap ~/.xmodmaptừ dòng lệnh hoạt động và làm những gì tôi muốn. Vấn đề là điều này được thiết lập lại mỗi lần x khởi động lại. Đó là nơi tôi mong đợi xinitrc xuất hiện - không nên tải mỗi lần x bắt đầu và chạy lệnh xmodmap? Nếu lệnh hoạt động, tại sao nó không làm gì khi đọc từ tệp?

Tôi đã thử một vài thứ với setxkbmap, cả hai đều không hoạt động. Hai lần thử bên dưới là trong tập tin vào những thời điểm riêng biệt.

# ~/.xinitrc
setxkbmap -option caps:esc     # attempt 1
setxkbmap -option esc:nocaps   # attempt 2

Cả hai lệnh đều không làm bất cứ điều gì có thể cảm nhận được từ dòng lệnh, vì vậy tôi cho rằng tôi đã nhận lệnh sai. Tôi thích ý tưởng của giải pháp này vì nó là một lớp lót và không yêu cầu bất cứ điều gì trong một số tệp khác. Nếu chỉ có nó làm việc.

Là .xinitrc tệp sai đang sử dụng? Tôi biết startx đang tải từ ~ / .xinitrc.

Tôi yêu cầu các giải pháp có thể chứa toàn bộ (các) tệp, không chỉ một dòng (nếu có nhiều hơn một yêu cầu trong tệp) vì vậy tôi không làm rối một số bước trung gian. Ví dụ: nếu tôi cần một cái gì đó trong .xinitrc và một cái gì đó trong .xcapsrebind, vui lòng hiển thị cả hai tệp và tất cả các nội dung được yêu cầu (tôi cũng có thể xử lý được yêu cầu nối thêm thứ gì đó vào cuối, nhưng nếu có thể yêu cầu & hoặc tương tự, xin vui lòng cho tôi biết).


2
Trong .xinitrc:setxkbmap -option caps:escape
jasonwryan

1
Chạy xmodmapvào .xinitrcnên làm việc. Đó là những gì tôi làm. Có thể ánh xạ một cái gì đó bất thường, để đảm bảo rằng nó thực sự chạy khi bạn bắt đầu x? Ngoài ra, bạn sử dụng trình quản lý cửa sổ / môi trường máy tính để bàn nào? KDE định kỳ, chỉnh sửa bản đồ bàn phím của tôi mà không cần tôi nói với nó. Có thể kiểm tra cài đặt máy tính để bàn của bạn để đảm bảo rằng không có gì đang chạy xmodmapphía sau lưng bạn.
yellowantphil

jasonwryan: Đã thử rằng trong cả .xinitrc; đã không làm việc. Nó đã làm việc từ dòng lệnh! Vì vậy, có một sự khởi đầu. Tôi nghĩ rằng yellowantphil là đúng-- ~/.xinitrckhông được chạy. Tôi đang sử dụng i3wm và không có DE ngay bây giờ, mặc dù điều tương tự đã xảy ra ở Pantheon khi tôi thử. Theo như tôi có thể nói, i3 không gây rối với xinitrc hoặc tự tải (nhưng tôi là một người mới, vậy tôi biết gì?).
ethanmad

Bạn cũng có thể cố gắng bao gồm Option "XkbOptions" "caps:escape"trong một Xtập tin cấu hình bàn phím, ví dụ/etc/X11/xorg.conf.d/10-keyboard.conf
don_crissti

Câu trả lời:


5

EDIT: Như một người dùng hữu ích đã chỉ ra, giải pháp ban đầu của tôi sẽ không tồn tại trong bản cập nhật. Giải pháp của ông trong các ý kiến ​​nên làm việc. Thay vào đó, nếu bạn muốn trao đổi Caps Lock và Escape, tôi khuyên bạn nên thêm các lệnh sau từ .xinitrc hoặc từ cấu hình i3:

.xinitrc:

xmodmap -e "clear lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"

tập tin cấu hình i3 (thường nằm ở .config / i3 / config hoặc tại .i3 / config)

# swap caps lock and escape
exec_always --no-startup-id xmodmap -e "clear lock"
exec_always --no-startup-id xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
exec_always --no-startup-id xmodmap -e "keycode 66 = Escape NoSymbol Escape"

Tôi nhận ra câu hỏi này khá cũ, nhưng nghĩ rằng tôi có thể thêm một câu trả lời cho những người trong chúng ta vẫn đang cố gắng tìm ra câu hỏi này.

Sau khi gặp vấn đề tương tự với một số DE không tải ~/.xinitrc, tôi đã tránh xmodmap hoàn toàn, đi đến /usr/share/X11/xkb/symbolsvà sửa đổi trực tiếp khóa => ánh xạ biểu tượng.

Để làm như vậy, tôi đã chỉnh sửa tệp cấu hình cho bàn phím của mình tại /usr/share/X11/xkb/symbols. Đối với hầu hết các bàn phím, đây phải là pctập tin.

Sau khi mở tệp, tôi chuyển thủ công xung quanh Escape và Caps_Lock cho các khóa tương ứng của chúng, kết quả được hiển thị bên dưới). Vì điều này ảnh hưởng đến cách X ánh xạ phần cứng vào Biểu tượng chính, nó sẽ hoạt động bất kể bạn đang ở trên Gnome hay i3 hay bất cứ thứ gì tương tự.

Một đoạn trong tệp kết quả của tôi như sau:

default  partial alphanumeric_keys modifier_keys

xkb_symbols "pc105" {

    key <ESC>  {        [ Caps_Lock             ]       };

    // The extra key on many European keyboards:
    key <LSGT> {        [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {        [ backslash,    bar     ]       };
    key <SPCE> {        [        space          ]       };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {        [ BackSpace, BackSpace  ]       };

    key  <TAB> {        [ Tab,  ISO_Left_Tab    ]       };
    key <RTRN> {        [ Return                ]       };

    key <CAPS> {        [ Escape                ]       };
    key <NMLK> {        [ Num_Lock              ]       };

    key <LFSH> {        [ Shift_L               ]       };
    key <LCTL> {        [ Control_L             ]       };
    key <LWIN> {        [ Super_L               ]       };

    key <RTSH> {        [ Shift_R               ]       };
    key <RCTL> {        [ Control_R             ]       };
    key <RWIN> {        [ Super_R               ]       };
    key <MENU> {        [ Menu                  ]       };

Điều này làm việc như một cơ duyên đối với tôi.

Khi tìm kiếm xung quanh các tập tin liên quan, tôi thấy các đề cập lặp đi lặp lại và triển khai một phần của một số loại cờ được sử dụng để chuyển đổi xung quanh một số phím nhất định, chẳng hạn như trao đổi Escape và Caps Lock. Tôi giả sử đây là những gì Công cụ Twome Gnome và setxkbmap sử dụng; tuy nhiên, tôi không thể tìm ra cách giữ các cờ này với trình quản lý cửa sổ i3. Các giải pháp trên nên hoạt động tốt.

Hy vọng điều này khắc phục vấn đề!


trong cấu hình i3 của bạn:exec --no-startup-id setxkbmap -layout whatever -variant whatever -option caps:escape
quixotic

lưu ý các thay đổi của bạn đối với ...xkb/symbols/pctệp hệ thống sẽ được ghi đè vào lần tiếp theo xkeyboard-confighoặc xkb-datacác gói được cập nhật.
quixotic

1

Hai khả năng:

1) .xinitrckhông được chạy - nó được sử dụng bởi xinit, startx và một vài phương pháp khác để bắt đầu các phiên X, nhưng không được hỗ trợ phổ biến - bạn có thể đang sử dụng trình quản lý hiển thị không chạy nó. Thêm một cái gì đó vào .xinitrc chẳng hạn như touch /tmp/xinitrc-was-runcó thể giúp xác định xem đó có phải là trường hợp không.

2) Xorg tự động đặt lại về cài đặt mặc định khi không có máy khách nào được kết nối - nếu .xinitrc kết thúc trước khi trình quản lý cửa sổ hoặc bất cứ thứ gì khác bắt đầu chạy, thì các thay đổi xmodmap hoặc setxkbmap sẽ bị mất.

Nếu có một tùy chọn XKB đã được xác định mà bạn muốn sử dụng, thay vì chạy các chương trình để thay đổi cài đặt mỗi khi Xorg khởi động, bạn có thể chỉ cần cho Xorg khởi động với các cài đặt phù hợp. Chẳng hạn, để kích hoạt các phím Ctrl-Alt-Backspace để giết Xserver của tôi, tôi đã cài đặt một tệp có tên /etc/X11/xorg.conf.d/90-zap.conf:

# This configuration snippet enables the Ctrl-Alt-Backspace server kill key
# 
# To use it, link or copy into /etc/X11/xorg.conf.d/
#
# Note that only the last XkbOptions setting seen for a device will be used,
# so to use multiple options, copy this file and add options into the Option
# string, such as "terminate:ctrl_alt_bksp,ctrl:swapcaps"

Section "InputClass"
    Identifier "keyboard zap by default"
    MatchIsKeyboard "on"

    Option "XKbOptions" "terminate:ctrl_alt_bksp"
EndSection

Bạn có thể đọc thêm về điều này trong các tài liệu X.Org tại https://www.x.org/release/X11R7.7/doc/xorg-docs/input/XKB-Config.html .

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.