Hoán đổi alt và siêu


27

Tôi có Macbook Air chạy Linux. Tôi muốn trao đổi các phím altsuperphím ở cả hai bên của bàn phím với nhau.

Làm thế nào để tôi làm điều này với các công cụ cli?

Cập nhật

Theo câu trả lời của Drav Sloan, tôi đã sử dụng như sau:

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

1
Điều kỳ lạ là mọi thứ đã hoạt động với tôi (mac air) khi tôi chỉ lấy 6 dòng đầu tiên chứ không phải bototm một lần vào một tệp và chạy tệp xmobmap trên đó. Với những dòng dưới cùng tôi đã có lỗi.
Leo Ufimtsev

Câu trả lời:


20

Một cách để đạt được điều đó là thông qua xmodmap. Bạn có thể chạy xevđể có được các sự kiện quan trọng. Khi chạy xevmột hộp sẽ xuất hiện và bạn có thể tập trung vào nó và nhấn các phím bạn muốn trao đổi. Nó sẽ xuất chi tiết tương tự như cho Altkhóa:

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Tôi đang dùng PC và không có "Khóa lệnh", nhưng có "Khóa Windows" tương đương và xev cung cấp:

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Vì xmodmap không có ý tưởng statevà có thể dễ dàng phá vỡ ánh xạ chính, tôi khuyên bạn nên thực hiện:

xmodmap -pke > defaults

Sau đó, chúng tôi tạo một tệp xmodmap:

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

Lưu ý cách tôi đang sử dụng mã khóa xevtrả về. Ngoài ra ở đây tôi chỉ thay thế các phím siêu và phím trái (và để lại các phím bên phải cho hành vi cũ của chúng). Sau đó, chúng ta chỉ cần chạy xmodmap, để thiết lập các phím này:

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

Bạn có thể chạy mà không cần -vchuyển đổi (dài dòng) để chạy im lặng, nhưng tôi thấy nó hữu ích nếu bạn mắc lỗi trong tệp modmap của mình. Nếu mọi thứ trở nên lộn xộn thì chỉ cần áp dụng lại mặc định của bạn:

xmodmap defaults

Modmap thường được chạy khi khởi động X, vì vậy bạn có thể áp dụng chúng làm mặc định nếu bạn đặt các lệnh modmap của mình ~/.xmodmaprc.


Có cách nào để làm điều này với setxkbmap? Tôi muốn sử dụng setxkbmap -option compose:ralttùy chọn cùng với điều này.

Tôi đã sử dụng giải pháp exchange_opt_cmd trong một câu trả lời khác, nhưng câu trả lời này xứng đáng với một upvote vì nó rất kỹ lưỡng và được viết rõ ràng. Bravo, thưa ngài.
John Franklin

Cảm ơn. Tôi đã nhận được xmodmap lộn xộn và đánh giá cao nếu bạn có thể giúp hỏiubub.com/questions/1026246/ Đổi
Tim

26

Nếu bạn muốn làm điều này trên bàn phím Apple, hãy thử điều này:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

Để làm việc này với phiên bản Linux thấp hơn, bạn có thể dùng thử: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


Mặc dù câu trả lời khác cũng làm việc, đây là những giải pháp cho Mac Sách; làm việc như người ở!
sinisterstuf

1
Tại sao đây không phải là mặc định?!
John Franklin

Tôi không có quyền ghi vào tập tin này. :-(
itmuckel

1
@ Micha90 - bạn cần sử dụng tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin

2
Dành một giờ để cấu hình xmodmap. Nó hoạt động. Sau đó, xem câu trả lời thứ 2 ...
Bilow

17

Nếu bạn chỉ muốn hoán đổi alt trái và siêu khóa thực hiện lệnh trong thiết bị đầu cuối của bạn:

setxkbmap -option altwin:swap_alt_win

Để khôi phục hành vi mặc định, chỉ cần sử dụng:

setxkbmap -option

Lưu ý: Đây là tạm thời. Nếu bạn muốn các hiệu ứng vĩnh viễn thêm nó vào tập tin khởi động của bạn.


4
Đây phải là giải pháp được chấp nhận, vì nó sạch và sử dụng chức năng tích hợp. Bạn nên đề cập rằng, để khôi phục hành vi mặc định bạn chỉ có thể sử dụng setxkbmap -option. Và nếu bạn chỉ muốn trao đổi alt trái và siêu khóa , thì hãy sử dụng lệnh này : setxkbmap -option altwin:swap_lalt_lwin.
erik

1
Tôi có bàn phím Logitech và điều này hoạt động để chuyển đổi phím windows (Super_L) bằng alt bên trái (Alt_L). Cảm ơn!
Derek

4
$ xmodmap -pke

Lưu ý rằng mã khóa alt và super bị ràng buộc, sau đó trong thư mục nhà của bạn mở / tạo một tệp mới .xmodmaprc. Ví dụ: các phím super / alt của tôi bị ràng buộc như vậy

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

Nhưng để trao đổi các khóa, bạn sẽ đặt như sau vào .xmodmaprc

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R

Ghi đè mã khóa / liên kết vai trò ... đơn giản và nó hoạt động. Tự hỏi nếu có bất kỳ nhược điểm so với remove ...giải pháp.
Đổ chuông

Hãy nhớ rằng bạn có thể sử dụng grepđể lọc đầu ra vì vậy xmodmap -pke | grep -i "super\|alt"sẽ dễ dàng hơn để xem những gì bạn cần.
Benjamin R

0

Nếu bạn là một trong những người không may mắn như tôi không thể lấy xmodmap để chuyển sang Alt phải bằng Ctrl, thì có lẽ điều này sẽ giúp ích.

Nếu bạn nhấn phải Alt và e và bạn nhận được é thì giải pháp này là dành cho bạn (cần cải thiện).

Chạy cái này trong terminal (kiểm tra mã khóa của bạn với xev):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

sau đó đặt mã này vào .Xmodmap của bạn:

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

Mã này đặt khóa Alt_Gr của bạn thành Alt_R, và sau đó nó hoán đổi Alt_r bằng Ctrl_R.

Nếu bạn muốn điều này duy trì sau khi bạn đăng xuất, hãy đặt các lệnh sau vào bất kỳ tệp shell khởi động nào của bạn, ví dụ ~ / .profile:

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

nguồn: câu hỏi1 câu hỏi2

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.