Làm cách nào để hoán đổi các phím Command và Control với xkb từng bước?


9

Tôi muốn sử dụng bàn phím nhôm dài của Apple với các phím Command Cmdvà Control bị tráo đổi Ctrl. Làm thế nào điều này được thực hiện từng bước trên Trusty Tahr (14.04) bằng cách sử dụng xkb?

Lưu ý: Đây giải pháp không làm việc cho tôi như xkbthế xmodmaptrong 13,04 hoặc thậm chí sớm hơn .


1
Giải pháp này không hiệu quả với tôi. Nó rất có thể đã lỗi thời (thực sự tôi khá chắc chắn, chỉ không thể tìm thấy tài liệu tham khảo ngay bây giờ). Tôi đã thử nó trước khi đăng. Đó là lý do tại sao tôi chỉ định phiên bản Ubuntu.
Aleksandar Savkov

1
@WaldirLeoncio Tôi hy vọng điều này làm cho nó rõ ràng lý do tại sao câu hỏi là KHÔNG phải là một trùng lặp: askubuntu.com/questions/325272/...
Aleksandar Savkov

Câu trả lời:


7

Câu trả lời này chủ yếu dựa trên câu trả lời được đưa ra ở đây . Lý do tôi hỏi và trả lời câu hỏi này một lần nữa là bước cuối cùng, không được mô tả đầy đủ. Để đọc thêm về xkbnhìn ở đây , ở đâyở đây .

  1. Tạo một tệp trong /usr/share/X11/xkb/symbols(cũng có thể được /etc/X11/xkb/symbolsgọi) altwin2và chứa ánh xạ sau:

    // Control is SWAPPED with Win-keys 
    partial modifier_keys
    xkb_symbols "cmd_n_ctrl" {
        key <LWIN> {        [       Control_L               ]       };
        key <RWIN> {        [       Control_R               ]       };
        key <LCTL> {       [       Super_L         ]       };
        modifier_map Control { <LWIN>, <RWIN> };
        modifier_map Mod4 { <LCTL> };
    };
    
  2. Chèn dòng sau vào option = symbolsphần trong /usr/share/X11/xkb/rules/evdev(bỏ qua cảnh báo trên dòng đầu tiên):

    altwin2:cmd_n_ctrl               =       +altwin2(cmd_n_ctrl)
    
  3. Thêm tùy chọn mới vào /usr/share/X11/xkb/rules/evdev.lstbên dưới phần option:

    altwin2:cmd_n_ctrl    Win swapped with Ctrl
    
  4. Nếu bạn không biết tệp cấu hình bàn phím của mình ở đâu, bạn có thể chỉnh sửa nó bằng cách sử dụng trình soạn thảo dconf , thêm "altwin2:cmd_n_ctrl"vào xkb-optionsdưới org :: gnome :: desktop :: nguồn đầu vào như được hiển thị ở đây . Nếu bạn biết tệp cấu hình của mình ở đâu, bạn nên bao gồm tùy chọn mới trong XkbOptionstrường như dưới đây:

    Section "InputClass"
            Identifier "keyboard-layout"
            Driver "evdev"
            MatchIsKeyboard "yes"
            Option "XkbLayout" "us, ru, ca, fr"
            Option "XkbOptions" "altwin2:cmd_n_ctrl"
    EndSection
    
  5. Khởi động lại hoặc khởi động lại lightdmđể cập nhật các thay đổi:

    sudo restart lightdm
    

GHI CHÚ: nếu có bất kỳ thay đổi nào được thực hiện trực tiếp trong các tệp bố cục, tức là không sử dụng tùy chọn, các tệp được lưu trong bộ nhớ cache /var/lib/xkb/cần phải được xóa như được chỉ ra ở đây .


2
Nên là !option = symbolsphần, không options = symbols(dành thời gian tìm kiếm "tùy chọn =" để tìm phần).
Ben Davis


Giống như hầu hết mọi thứ với xkb và xmodmap, không hoạt động, có thể đã phá vỡ hệ thống của tôi theo cách khác, tôi phát ngán với thứ nhảm nhí này và tôi thực sự mong muốn linux sẽ có được thứ tào lao cơ bản nhất về ánh xạ và ràng buộc chính.
Seph

Hãy nhớ điều này đã được viết vào năm 2014 và không áp dụng cho các bản phân phối hiện đại.
Aleksandar Savkov

3

Vào ngày 16.04, đây là cách cuối cùng tôi đã làm việc này. Xmodmap không hoạt động phổ biến trong tất cả các ứng dụng, công cụ chỉnh sửa gnome thiếu chức năng, đã chỉnh sửa khóa hoán đổi khóa altwin2 tùy chỉnh (như câu trả lời chính ở đây), vì vậy tôi đã xé tóc ra cho đến khi tôi kết hợp nhiều câu trả lời vào đây và giải pháp tao nhã:

gksudo gedit /usr/share/X11/xkb/symbols/pc

thay đổi nó thành:

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

key <ESC>  {    [ Escape        ]   };

// 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> {    [ Caps_Lock     ]   };
key <NMLK> {    [ Num_Lock      ]   };

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

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

// Beginning of modifier mappings.
modifier_map Shift  { Shift_L, Shift_R };
modifier_map Lock   { Caps_Lock };
modifier_map Control{ Control_L, Control_R };
modifier_map Mod2   { Num_Lock };
modifier_map Mod4   { Super_L, Super_R };

// Fake keys for virtual<->real modifiers mapping:
key <LVL3> {    [ ISO_Level3_Shift  ]   };
key <MDSW> {    [ Mode_switch       ]   };
modifier_map Mod5   { <LVL3>, <MDSW> };

key <ALT>  {    [ NoSymbol, Control_L, Control_R    ]   };
//include "altwin(meta_alt)"
key <LALT> {    [ Control_L     ]   };
key <RALT> {    [ Control_R     ]   };
modifier_map Mod1   { Alt_L, Alt_R, Meta_L, Meta_R };

key <META> {    [ NoSymbol, Meta_L, Meta_R  ]   };
modifier_map Mod1   { <META> };

key <SUPR> {    [ NoSymbol, Super_L ]   };
modifier_map Mod4   { <SUPR> };

key <HYPR> {    [ NoSymbol, Hyper_L ]   };
modifier_map Mod4   { <HYPR> };
// End of modifier mappings.

key <OUTP> { [ XF86Display ] };
key <KITG> { [ XF86KbdLightOnOff ] };
key <KIDN> { [ XF86KbdBrightnessDown ] };
key <KIUP> { [ XF86KbdBrightnessUp ] };
};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
key <PRSC> {
type= "PC_ALT_LEVEL2",
symbols[Group1]= [ Print, Sys_Req ]
};
key <SCLK> {    [  Scroll_Lock      ]   };
key <PAUS> {
type= "PC_CONTROL_LEVEL2",
symbols[Group1]= [ Pause, Break ]
};
key  <INS> {    [  Insert       ]   };
key <HOME> {    [  Home         ]   };
key <PGUP> {    [  Prior        ]   };
key <DELE> {    [  Delete       ]   };
key  <END> {    [  End          ]   };
key <PGDN> {    [  Next         ]   };

key   <UP> {    [  Up           ]   };
key <LEFT> {    [  Left         ]   };
key <DOWN> {    [  Down         ]   };
key <RGHT> {    [  Right        ]   };
};

Tiết kiệm.

rm -rf /var/lib/xkb/*

(Tôi không biết nếu điều này là bắt buộc, nhưng tôi đã làm nó.)

Khởi động lại.


Cảm ơn vì điều đó. Tôi sẽ kiểm tra nó khi tôi chuyển sang 16.04 trong tương lai gần.
Alexandar Savkov

Chỉ cần sử dụng điều này trên bản nâng cấp 16.10 của tôi. Làm việc rất độc đáo.
Tom Mercer

1
Cho đến nay, câu trả lời đơn giản nhất, đã hoạt động như một cơ duyên trên Fedora của tôi. Cảm ơn!
hakunin
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.