สลับ alt และ super


27

ฉันมี Macbook Air ที่ใช้ Linux ฉันต้องการสลับaltและsuperปุ่มทั้งสองด้านของแป้นพิมพ์ด้วยกัน

ฉันจะทำสิ่งนี้ด้วยเครื่องมือ cli ได้อย่างไร

ปรับปรุง

ต่อไปนี้คำตอบของ Drav Sloan ฉันใช้สิ่งต่อไปนี้:

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
สิ่งที่แปลกสำหรับฉัน (mac air) สำหรับเมื่อฉันเอาเฉพาะ 6 บรรทัดแรกและไม่ bototm ครั้งเดียวลงในไฟล์และรันไฟล์ xmobmap บนมัน ด้วยบรรทัดล่างสุดฉันมีข้อผิดพลาด
Leo Ufimtsev

คำตอบ:


20

xmodmapวิธีหนึ่งที่จะประสบความสำเร็จที่จะผ่าน คุณสามารถเรียกใช้xevเพื่อรับเหตุการณ์สำคัญ ในการใช้xevกล่องควรปรากฏขึ้นและคุณสามารถมุ่งเน้นและกดปุ่มที่คุณต้องการแลกเปลี่ยน มันควรจะส่งออกรายละเอียดคล้ายกับที่Altสำคัญ:

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

ฉันใช้พีซีและไม่มี "คีย์คำสั่ง" แต่มี "คีย์ Windows" ที่เทียบเท่าและ xev ให้:

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

เนื่องจาก xmodmap ไม่มีความคิดstateและสามารถแบ่งการแมปที่สำคัญได้ง่ายฉันจึงขอแนะนำให้คุณทำ:

xmodmap -pke > defaults

จากนั้นเราสร้างไฟล์ 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

สังเกตว่าฉันใช้รหัสที่xevส่งคืนอย่างไร นอกจากนี้ที่นี่ฉันแค่แทนที่ปุ่มซ้ายสุดและปุ่ม alt (และปล่อยปุ่มที่ถูกต้องให้เป็นแบบเก่า) จากนั้นเราสามารถเรียกใช้xmodmapเพื่อตั้งค่าคีย์เหล่านี้:

$ 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

คุณสามารถเรียกใช้โดยไม่มี-vสวิตช์ (verbose) สำหรับการทำงานแบบเงียบ แต่ฉันพบว่ามีประโยชน์หากคุณทำผิดพลาดในไฟล์ modmap ของคุณ หากสิ่งต่าง ๆ ยุ่งเหยิงเพียงแค่ใช้ค่าเริ่มต้นของคุณใหม่:

xmodmap defaults

Modmap มักจะวิ่งที่เริ่มต้นขึ้นของ X เพื่อให้คุณสามารถได้เหล่านี้นำไปใช้เป็นค่าเริ่มต้นถ้าคุณใส่คำสั่ง modmap ~/.xmodmaprcคุณใน


มีวิธีทำเช่นนี้ด้วยsetxkbmapหรือไม่? ฉันต้องการใช้setxkbmap -option compose:raltตัวเลือกร่วมกับสิ่งนี้

ฉันใช้โซลูชัน swap_opt_cmd ในคำตอบอื่น แต่อันนี้สมควรได้รับ upvote เพราะมันละเอียดและเขียนได้อย่างชัดเจน ไชโย
John Franklin

ขอบคุณ ผมได้รับประทานอาหาร xmodmap ขึ้นและขอบคุณถ้าคุณสามารถช่วยaskubuntu.com/questions/1026246/...
ทิม

26

หากคุณต้องการทำสิ่งนี้บนคีย์บอร์ด Apple ลองใช้งาน:

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

เพื่อให้มันใช้งานได้กับ Linux เวอร์ชันต่ำกว่าคุณสามารถลองใช้งานได้ที่: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


ถึงแม้ว่าคำตอบอื่น ๆ ทำยังทำงานนี้เป็นวิธีการแก้ปัญหาสำหรับ Mac หนังสือ; ทำงานเหมือนจับใจ!
sinisterstuf

1
ทำไมนี่ไม่ใช่ค่าเริ่มต้น!
John Franklin

ฉันไม่มีสิทธิ์ในการเขียนไฟล์นี้ :-(
itmuckel

1
@ Micha90 - คุณต้องใช้tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin

2
ใช้เวลาหนึ่งชั่วโมงในการกำหนดค่า xmodmap มันได้ผล. จากนั้นดูคำตอบที่ 2 ...
Bilow

17

หากคุณต้องการสลับซ้าย alt และ super key ดำเนินการคำสั่งในเทอร์มินัลของคุณ:

setxkbmap -option altwin:swap_alt_win

เพื่อคืนค่าพฤติกรรมเริ่มต้นเพียงใช้:

setxkbmap -option

หมายเหตุ: นี่เป็นเพียงชั่วคราว หากคุณต้องการให้เอฟเฟกต์เพิ่มอย่างถาวรไปยังไฟล์เริ่มต้นของคุณ


4
นี่ควรเป็นโซลูชันที่ได้รับการยอมรับเนื่องจากมีความสะอาดและใช้ฟังก์ชันในตัว คุณควรจะได้กล่าวว่าการเรียกคืนการทำงานเริ่มต้นsetxkbmap -optionคุณก็สามารถใช้ และถ้าคุณต้องการAlt แลกเปลี่ยนซ้ายและที่สำคัญสุดsetxkbmap -option altwin:swap_lalt_lwinแล้วใช้คำสั่งนี้:
erik

1
ฉันมีคีย์บอร์ด Logitech และสิ่งนี้ทำงานเพื่อสลับหน้าต่าง windows ของฉัน (Super_L) ด้วย alt ซ้าย (Alt_L) ขอบคุณ!
Derek

4
$ xmodmap -pke

จดรหัสที่ alt และ super ถูกผูกไว้จากนั้นในโฟลเดอร์บ้านของคุณเปิด / สร้างไฟล์ใหม่. xmodmaprc ตัวอย่างเช่นปุ่ม super / alt ของฉันถูกผูกไว้เช่นนี้

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

แต่เพื่อสลับคีย์คุณจะต้องใส่ค่าต่อไปนี้ใน. 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

เขียนทับรหัสคีย์ / การเชื่อมโยงบทบาท ... ง่าย ๆ และใช้งานได้ สงสัยว่ามีข้อเสียเปรียบใด ๆ เมื่อเทียบกับการremove ...แก้ปัญหา
แหวนØ

จำไว้ว่าคุณสามารถใช้grepเพื่อกรองเอาท์พุทดังนั้นxmodmap -pke | grep -i "super\|alt"ควรทำให้ง่ายต่อการดูสิ่งที่คุณต้องการ
Benjamin R

0

หากคุณเป็นหนึ่งในคนโชคร้ายอย่างฉันที่ไม่สามารถรับ xmodmap เพื่อเปลี่ยน Alt ขวาด้วย Ctrl ขวาอาจจะช่วยได้

หากคุณกด Alt และ e ที่ถูกต้องและคุณได้รับéวิธีนี้เหมาะสำหรับคุณ (ต้องปรับปรุง)

รันสิ่งนี้ในเทอร์มินัล (ตรวจสอบรหัสของคุณด้วย xev):

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

จากนั้นใส่รหัสนี้ใน. Xmodmap ของคุณ:

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

รหัสนี้ตั้งค่าปุ่ม Alt_Gr ของคุณเป็น Alt_R จากนั้นจะสลับ Alt_r ด้วย Ctrl_R

หากคุณต้องการให้สิ่งนี้ยังคงอยู่หลังจากที่คุณออกจากระบบให้ใส่คำสั่งต่อไปนี้ในไฟล์เชลล์เริ่มต้นใด ๆ ของคุณตัวอย่างเช่น ~ / .profile:

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

แหล่งที่มา: คำถาม 1 คำถาม 2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.