ฉันจะสลับคีย์คำสั่งและปุ่มควบคุมบน MacBook Pro ได้อย่างไร


59

ฉันขัดถูเว็บและฉันไม่สามารถทำให้ Xmodmap / ทำงานได้อย่างถูกต้อง ฉันต้องการสลับทั้งสองปุ่มคำสั่งของฉันกับปุ่มควบคุมของฉัน - ในสาระสำคัญกลับหัวสิ่งที่พวกเขาทำในปัจจุบัน

ฉันจะทำอย่างไร

ฉันลองxmodmap -e "keycode 133 = Control_L"และคำสั่งที่สอดคล้องกันสำหรับรหัส 134 (คำสั่งขวา) และ 37 (ควบคุมซ้าย) ผมก็พยายามที่คำสั่งเหล่านี้บวกxmodmap -pke > ~/.Xmodmapและในxmodmap ~/.Xmodmap.xinitrc

เป้าหมายสุดท้ายของฉันคือฉันต้องการให้ HUD / Dash ปรากฏขึ้นเมื่อฉันคลิกcontrolและcommandเพื่อควบคุมการทำงานเช่นcontrol-vเป็นทางลัดคอมมอนด์เพื่อวางฉันจะคลิกcommand-v

คำตอบ:


64

ฉันคิดออก ใส่ต่อไปนี้ใน~/.Xmodmap:

clear control
clear mod4

keycode 105 =
keycode 206 =

keycode 133 = Control_L NoSymbol Control_L
keycode 134 = Control_R NoSymbol Control_R
keycode 37 = Super_L NoSymbol Super_L

add control = Control_L
add control = Control_R
add mod4 = Super_L

เพื่อทดสอบเรียกใช้คำสั่ง:

xmodmap ~/.Xmodmap

หากต้องการให้มันทำงานทุกครั้งให้เพิ่มเข้าไปในแอปพลิเคชันเริ่มต้น

สิ่งนี้น่าจะใช้ได้กับ MacBook Pro ทุกรุ่น ปัญหาคือ Xmodmap กำลังกำหนด Super_L ให้กับปุ่มคำสั่งด้านซ้ายและขวาและ Control_L ให้กับปุ่มควบคุมด้านซ้าย ด้วยเหตุผลบางอย่างตามค่าเริ่มต้น Ubuntu คิดว่า MacBook Pro มีแป้นพิมพ์มาตรฐาน 105 ปุ่ม (อาจคิดว่าเป็น Apple Keyboard แบบเต็ม) แต่มันผิด อย่างไรก็ตามผมมีพระราชเสาวนีย์พิมพ์ซ้ำเพื่อ keysims ขวาแล้วมอบหมาย keysims ไปและcontrolmod4


ฉันมีคำถามเพิ่มเติม: ฉันจะเปลี่ยนปุ่มควบคุมด้านซ้ายเป็นคีย์ alt และ viceversa ได้อย่างไรปุ่ม alt ถัดจากปุ่มควบคุมด้านซ้ายเพื่อเปลี่ยนเป็นปุ่มควบคุมด้านซ้าย
719016

ฉันจะให้ปุ่ม win ทางด้านขวาทำงานต่อไปได้อย่างไร
arcanine

โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับการสลับเค้าโครงแป้นพิมพ์ ดังนั้นหากคุณใช้มากกว่าหนึ่งเลย์เอาต์คุณจะต้องเรียกใช้ xmodmap หลังจากเปลี่ยนเลย์เอาต์ทุกครั้ง คำตอบด้านล่างที่แนะนำการแก้ไข / usr / share / X11 / xkb / symbols / pc นั้นเป็นสิ่งที่ยกเว้น
clorz

มันทำงานใน VNCViewer ฉันใช้เดสก์ท็อป Gnome และต้องการแทนที่แป้นพิมพ์ apple ของฉัน (คีย์คำสั่ง) ด้วย Ctrl Key
เหม็ด

32

ฉันเพิ่งติดตั้ง Ubuntu 16.04 ดูอัลบูตบน MBP13 ของฉัน "เมื่อวานนี้สำหรับ Ubuntu 16.04 นี่คือวิธีที่ฉันทำ:

ขั้นตอนที่ 1: เรียกใช้เทอร์มินัล

ขั้นตอนที่ 2: แก้ไข X Keyboard Extension

sudo nano /usr/share/X11/xkb/symbols/pc

ขั้นตอนที่ 3: ทำการเปลี่ยนแปลงต่อไปนี้ ตรวจสอบให้แน่ใจว่าไฟล์ของคุณมีลักษณะดังนี้:

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

...

key <RCTL> {    [ Super_R       ]   };
key <RWIN> {    [ Control_R     ]   };

ขั้นตอนที่ 4: ล้างแคชของ xkb

sudo rm -rf /var/lib/xkb/*

ขั้นตอนที่ 5 (เงื่อนไข): หากไม่มีการสลับคีย์หลังจากขั้นตอนที่ 4 ให้รีสตาร์ทคอมพิวเตอร์ มันทำงานให้ฉันหลังจากนี้

หวังว่ามันจะช่วยโชคดี!


นี่เป็นทางออกที่ดีกว่าคำตอบที่ได้รับการยอมรับ
นาย Axilus

ไม่ได้ผลสำหรับฉัน
chovy

นี่คือคำตอบที่แท้จริง (2017)
CESCO

นี่คือคำตอบ ต้องการเริ่มต้นใหม่หลังจากการเปลี่ยนแปลง ขอบคุณ
lxm7

สิ่งนี้ได้ผลสำหรับฉัน! ในที่สุดก็มีการสลับระหว่าง Mac OS และ Linux ไม่ได้เกี่ยวข้องกับการปรับผังรายการหน่วยความจำของกล้ามเนื้อเกือบเท่า :)
JoLoCo

15

เข้าไปใน System -> Preferences -> Keyboard

คลิกที่แท็บ "เลย์เอาต์" จากนั้นคลิกปุ่ม "ตัวเลือกเค้าโครง"

คลิกที่ "การทำงานของปุ่ม Alt / Win"

เลือก "การควบคุมถูกแมปกับปุ่ม Win (และปุ่ม ctrl ปกติ)

จากhttp://ubuntuforums.org/showthread.php?t=1293081


9
แค่โน้ต - นี่ไม่ได้สลับคีย์มันแค่ทำให้ปุ่มคำสั่งคีย์ควบคุมเพิ่มเติม
Fabian Tamp

สิ่งนี้ใช้ไม่ได้กับ Ubuntu 16.04
ไม่ซ้ำกัน

สิ่งนี้ดูเหมือนจะนำไปสู่พฤติกรรมที่ต้องการใน Ubuntu 18.04
RM de Vos

ฉันใช้ "alt สลับกับ Win" เพราะฉันใช้แป้นพิมพ์ Apple บน Ubuntu
SM Adnan

6

ไปที่การตั้งค่าระบบและจากนั้นไปที่รูปแบบแป้นพิมพ์จากนั้นไปที่ตัวเลือกจากนั้นไปที่การทำงานของปุ่ม Win / Alt จากนั้นตรวจสอบ "Meta สวิทช์ Ctrl" จากนั้นในการตรวจสอบตำแหน่ง Ctrl "Ctrl สวิทช์

ใน 12.04.1 คุณเปลี่ยนสิ่งนี้โดย:

ขั้นแรกไปที่ "การตั้งค่าระบบ" จากนั้นคลิกที่ "แป้นพิมพ์" และ "การตั้งค่าเค้าโครง" (ที่ด้านล่างซ้าย) จากนั้น "ตัวเลือก" ที่ด้านล่างขวาจากนั้นขยายแท็บ "Alt / Win พฤติกรรมปุ่ม" แล้วเลือก " การควบคุมถูกแมปเพื่อรับกุญแจ (และปุ่ม Ctrl ปกติ) "


ทำงานให้ฉันใน 12.04 ฉันไม่อยากจะเชื่อจริง ๆ แต่มันได้ผล หลังจากชั่วโมงแห่งการยุ่งกับ. xmodmap
jyoseph

ขอบคุณมาก ฉันมีระบบที่ใหม่กว่า (สิ่งที่คุณอธิบายในย่อหน้าที่สอง) Ctrl ถูกแมปกับปุ่ม Win ทำให้ Cmd ทำงานเป็น Ctrl ตำแหน่งคีย์ Ctrl -> Ctrl ซ้ายเป็น Meta ทำตรงข้าม นอกจากนี้ฉันยังต้องไปที่ Startup and Shutdown -> Service Manager -> Startup Services และเปิดใช้ Keyboard Daemon (นี่เป็นค่าเริ่มต้น)
0__

14.04 ดูเหมือนจะไม่มีลิงก์ "ตัวเลือก"
Waldir Leoncio

สำหรับ Ubuntu 15.04 ตัวเลือกนี้มีวางจำหน่ายแล้วที่ "อุปกรณ์อินพุต> แป้นพิมพ์> แท็บขั้นสูง> Alt / Win ส่วนการทำงานของคีย์> Ctrl ถูกแมปเพื่อรับคีย์ (และปุ่ม Ctrl ปกติ)"
Serj Zaharchenko

2
ไม่พบสิ่งใดบน Ubuntu 16.04
Houman

5

ชุมชน Ubuntu หน้าความช่วยเหลือสำหรับคีย์บอร์ดแอปเปิ้ลจะช่วยให้ขั้นตอนต่อไปอย่างถาวรทำให้การเปลี่ยนแปลงนี้: (ทดสอบ 2017/05/27)

รันคำสั่งต่อไปนี้เพื่อต่อท้ายบรรทัดการกำหนดค่าไปยังไฟล์ที่ /etc/modprobe.d/hid_apple.confสร้างขึ้นหากจำเป็น:

echo options hid_apple swap_opt_cmd=1 | sudo tee -a /etc/modprobe.d/hid_apple.conf

ทริกเกอร์คัดลอกการกำหนดค่าลงใน initramfs bootfile

sudo update-initramfs -u -k all

ทางเลือกรีบูต

sudo reboot

หากต้องการทดสอบชั่วคราวคุณสามารถเรียกใช้

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

4

อัปเดตเมื่อวันที่ 18.04 เนื่องจากไม่มีคำตอบใดที่ดูเหมือนว่าจะทำงานบนระบบของฉัน ฉันทำการติดตั้ง 18.04 ใหม่ทั้งหมดและพยายามใช้แป้นพิมพ์แบบแอปเปิ้ลอลูมิเนียมแบบมีสาย พฤติกรรมเริ่มต้นของ Left Super ในภาษาอังกฤษสหรัฐอเมริกาถูกจับคู่กับ Gnome Desktop Dashboard เครื่องมือปรับแต่งมีการตั้งค่าที่จำเป็นทั้งหมดใน GUI ที่ใช้งานง่าย!

sudo apt install gnome-tweak-tool

ก่อนอื่นฉันสลับฮอตคีย์แดชบอร์ดไปทางด้านขวาจากนั้นภายใต้ "ตัวเลือกเลย์เอาต์เพิ่มเติม" คุณสามารถใช้ "ตำแหน่ง Ctrl / สลับ Win ซ้ายด้วย Ctrl ซ้าย " เพื่อผลที่ดี


gnome-tweak-tool ยอดเยี่ยมมากขอบคุณ!
Dennis Golomazov

นี่ควรเป็นคำตอบที่ยอมรับได้ สำหรับ Mac ฉันกำลังพบว่า Gnome Tweak Tools มีการตั้งค่าที่ฉันต้องการภายใต้ Keybord & Mouse> ตัวเลือกเค้าโครงเพิ่มเติม> ตำแหน่ง Ctrl> สลับ Win Win ด้วย Ctrl ซ้าย แป้นคำสั่งของแป้นพิมพ์ Mac ดูเหมือนจะเรียกว่า "Win"
bhaller

ในปี 2019 ใน Gnome นี่เป็นทางออกที่ง่ายที่สุด ขอบคุณ
jymbob

1

ทำซ้ำวิธีสลับคำสั่งและแป้นควบคุมด้วย xkb ทีละขั้นตอนหรือไม่

ใน 16.04 นี่คือวิธีที่ฉันได้รับสิ่งนี้ในที่สุด Xmodmap ไม่สามารถทำงานได้อย่างเป็นสากลในแอพทั้งหมดเครื่องมือ gnome tweak ขาดฟังก์ชั่น dconf การแก้ไขการสลับคีย์ altwin2 แบบกำหนดเอง (เช่นคำตอบหลักที่นี่) ล้มเหลวดังนั้นฉันจึงฉีกผมออกจนกว่าจะรวมคำตอบหลายคำเข้าด้วยกัน และทางออกที่สง่างาม:

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

เปลี่ยนเป็น:

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        ]   };
};

บันทึก

rm -rf /var/lib/xkb/*

(ฉันไม่รู้ว่าสิ่งนี้จำเป็นหรือไม่ แต่ฉันทำ)

Reboot


นี่เป็นสิ่งที่ดี แต่ฉันไม่สามารถใช้เคล็ดลับเดียวกันเพื่อสลับแป้น ALT ของฉันเป็นปุ่มควบคุมด้านซ้าย ดูเหมือนว่าปุ่ม ALT จะทำงานแตกต่างกัน คุณรู้ฉันจะทำอย่างไร
Pierre Thibault

เคล็ดลับเดียวกันใช้ได้กับทุกสิ่ง คุณต้องสลับทั้งการแมปกุญแจและการแมป modifier_map นอกจากนี้คุณยังสามารถข้ามไปที่ gnome tweaks หรือ gconf ได้ฉันลืมที่และมีการตั้งค่าสลับหลายอย่างเช่น "สลับ ctrl และ alt"
Tom Mercer

เราไม่สามารถทำ: คีย์ <LALT> {[Control_L]}; คีย์ <RALT> {[Control_L]}; Alt จะถือว่าแตกต่างกัน ดังนั้นฉันจึงใช้ Gnome Tweaks ฉันไม่สามารถมีสิ่งที่ฉันต้องการได้ แต่มันก็ไม่เลว
Pierre Thibault

ฉันไม่แน่ใจว่าฉันเข้าใจปัญหาของคุณ หากคุณต้องการให้ทั้งสอง alts ทำงานเป็นตัวควบคุมไฟล์ตามที่ระบุไว้ข้างต้นจะทำให้ทั้งสองปุ่ม alt ทำงานเป็นตัวควบคุมและปุ่มควบคุมทั้งสองทำงานเป็น alts หากคุณสามารถระบุสิ่งที่คุณต้องการให้แต่ละปุ่มเป็นไปได้ฉันจะช่วยได้ไหม คุณลองไฟล์นี้หรือไม่ คุณใช้คอมพิวเตอร์เครื่องไหนและคีย์บอร์ดตัวไหน รูปแบบแป้นพิมพ์ภาษาฝรั่งเศสอาจทำให้เรามีปัญหา
Tom Mercer

ไม่ฉันไม่ได้ลองใช้ไฟล์ ฉันจะเห็นว่าในภายหลังในไฟล์ที่คุณทำสลับสอง alt ถึงสอง ctrl ฉันคิดถึงสิ่งนั้น ขอบคุณสำหรับการชี้ ฉันจะลองดู
Pierre Thibault

0

คุณอาจพบว่า Kinto มีประโยชน์ เป็นโครงการที่ฉันเพิ่งสร้างขึ้นหลังจากไม่กี่ปีของการแก้ปัญหานี้ด้วยวิธีการที่แตกต่างกันสองสามอย่างและตอนนี้ฉันรู้สึกว่ามันแข็งแกร่งพอที่จะแบ่งปัน

โปรแกรมติดตั้ง Kinto ใช้ python เพื่อทำการติดตั้งครั้งแรกหลังจากนั้นเป็นเพียงบริการ systemd, bash, xprop, setxkbmap และ xkbcomp เท่าที่ฉันเป็นห่วงมันเป็นวิธีแก้ปัญหาที่เร็วที่สุดและเป็นไปได้มากที่สุดสำหรับปัญหานี้ที่คุณจะพบ

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

นี่คือส่วนสำคัญเช่นกันหากคุณต้องการดูว่าอะไรคือหัวใจของมันทั้งหมดมันจะไม่สลับคีย์แมปของคุณเมื่อต้องการ ส่วนสำคัญยังไม่มีไฟล์ xkb keymap ที่กำหนดเองที่ตั้งค่าเคอร์เซอร์ลักษณะ macOS / การใช้คำศัพท์ที่ใช้ Cmd และปุ่มลูกศร

https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

เนื้อหาสาระสำคัญ

# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all

# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd

# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win

# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win

#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.