ฉันจะตั้งค่าคีย์ใหม่ใน Ubuntu 16.04 ได้อย่างไร?


23

สิ่งนี้ใช้ได้สำหรับเซสชันปัจจุบัน:

costales@dev:~/Desktop$ xmodmap -e "keycode 166 = less"
costales@dev:~/Desktop$ xmodmap -e "keycode 167 = greater"

จากนั้นฉันสร้างไฟล์ปรับแต่งนี้:

costales@dev:~/Desktop$ cat ~/.Xmodmap 
keycode 166 = less
keycode 167 = greater
costales@dev:~/Desktop$ 

แต่มันไม่ทำงานหลังจากรีบูต ฉันจะบังคับให้ทำการแมปใหม่เพื่อความอยู่รอดในการรีบูตได้อย่างไร


เพียงแค่ตอบนี้โดยใช้xkbมากกว่าที่นี่: askubuntu.com/a/960097/554991
danwild

คำตอบ:


15

ฉันใช้ 16.04 นิดหน่อยและดูเหมือนว่าจะใช้ sddm เป็นตัวจัดการเดสก์ท็อป มันเคยเป็น LightDM และ GDM มาก่อน predacessors ทั้งสองของมันถูกบันทึกไว้ให้โหลด~/.Xmodmapโดยอัตโนมัติ แต่ฉันไม่สามารถหาอะไรได้อย่างชัดเจนว่า sddm ทำอะไร

ดังนั้นจึงขอแนะนำให้เพียงแค่บังคับให้โหลดด้วยสคริปต์ใหม่ คุณเพียงแค่ต้องเรียกใช้xmodmap ~/.Xmodmapและคุณสามารถทำได้หลายวิธี:

อาจมีวิธีอื่น ๆ อีกไม่กี่โหลในการจัดการสิ่งนี้โดยพื้นฐานแล้วทำสิ่งเดียวกัน


2
ขอบคุณสำหรับทิป! การเพิ่มเพื่อเริ่มต้นใช้งานไม่ได้และ ~ / .xinitrc ไม่ออก แต่ผนวก "xmodmap ~ / .Xmodmap" เพื่อ ~ / .bashrc ทำงานได้! :)
Costales

1
การเพิ่มผ่านเครื่องมือเริ่มต้นกราฟิก (ซึ่งสร้างรายการใหม่ใน~/.config/autostart) ทำงานประมาณครึ่งเวลา ฉันรีบูทประมาณ 10 ครั้งตอนนี้และ 5 ครั้งคำสั่งที่ได้รับการดำเนินการและอีก 5 ครั้งมันไม่ได้ :-(
Alexander Rechsteiner

1
@Alexander Rechsteiner: ดูเหมือนว่าจะมีปัญหาใน Ubuntu 16.04 ฉันเล่นซอกับคำสั่งเริ่มต้นและการแมปคีย์และพฤติกรรมดูเหมือนจะไม่สอดคล้องกันมาก ฉันไม่ใช่ผู้เชี่ยวชาญในเรื่องแบบนี้ แต่ดูเหมือนไร้สาระอย่างยิ่งสำหรับมันที่จะเกิดขึ้น ...
nicorellius

6

ฉันเพิ่มไฟล์ที่/etc/X11/Xsession.d/80_xmodmapมีเนื้อหาเหล่านี้:

#!/bin/sh
# Set custom keycodes
#
# This file is sourced by Xsession(5), not executed.
# The "|| true" is to ensure that the Xsession script does not terminate on error

USRMODMAP="$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; then
        if [ -f "$USRMODMAP" ]; then
                /usr/bin/xmodmap "$USRMODMAP" || true
        fi
fi

ใช้ได้ผลทุกครั้ง


ดูเหมือนว่าจะใช้งานได้ แต่นี่เป็นข้อความที่ฉันได้รับใน. xsessions-errors: .Xmodmap: 1: bad keysym ในรายการตัวปรับเปลี่ยน 'Caps_Lock' ที่ไม่ถูกต้องไม่มีรหัสที่สอดคล้องกันนี่เป็น. xmodmap ของฉัน: $ cat .Xmodmap ลบ Lock = Caps_Lock keycode 9 = รหัส
กุญแจ

4

open gnome-session-Properties เพิ่มคำสั่งและชื่อ ไฟล์เดสก์ท็อปจะถูกสร้างขึ้นใน ~ / .config / autostart

remenber: ใช้พา ธ สัมบูรณ์เช่น /home/xxx/.Xmodmap ไม่เคยใช้ '~' เป็น dir บ้านของคุณ


2

ในประสบการณ์อันยาวนานของฉันกับแมปคีย์ในอูบุนตูที่แก้ปัญหาอย่างถาวรคือการปรับเปลี่ยนไฟล์ที่เรียกว่าในevdev/usr/share/X11/xkb/keycodes

เรียกใช้คำสั่งนี้ในพร้อมท์คำสั่ง

sudo gedit /usr/share/X11/xkb/keycodes/evdev

โปรดจำไว้ว่า gedit เป็นเครื่องมือแก้ไขข้อความของ Ubuntu ดังนั้นคุณสามารถใช้ nano หรือ vim แทน gedit

ไฟล์อยู่ในรูปแบบ: ALIAS: CODE คุณสามารถสลับปุ่มได้ด้วยการเปลี่ยนรหัสของปุ่มต่างๆ ตัวอย่างเช่นในการสลับ RCONTROL กับ RETURN ให้แก้ไขสองบรรทัดใน evdev เป็น:

<RTRN> = 105;

<RCTL> = 36;

หากต้องการทราบหมายเลขรหัสสำหรับปุ่มที่ทำงานxevบนเทอร์มินัล

อ้างถึงเอกสารประกอบสำหรับข้อมูลเพิ่มเติม https://buildmedia.readthedocs.org/media/pdf/python-evdev/latest/python-evdev.pdf


1

นำทางไปยัง

/usr/share/X11/xkb/symbols

ด้วยสิทธิ์ sudo ในตัวแก้ไขให้เปิดเลย์เอาต์ที่คุณต้องการแก้ไข แทนที่ค่า

หลังจากรีบูตระบบจะใช้การเปลี่ยนแปลง


นี่คือตัวอย่างที่ฉันใช้เพื่อทำการแมปปุ่มกดใหม่เนื่องจากปัญหาฮาร์ดแวร์คีย์บอร์ด

ตัวอย่างการแมปปุ่มกด


2
การแก้ไขเหล่านั้นจะถูกเขียนทับในครั้งต่อไปที่แพ็คเกจที่เป็นเจ้าของไฟล์เหล่านั้นได้รับการอัพเกรด
muru

อาจเป็นจริง แต่ฉันสงสัยว่าสิ่งเหล่านี้ได้รับการอัปเดตบ่อยครั้งมาก ฉันพอใจกับวิธีนี้มาหลายเดือนแล้วตั้งแต่ฉันแก้ไขปัญหาและไม่เคยทำอะไรเพิ่มเติมอีก และเพื่อป้องกันสิ่งนี้คุณสามารถบันทึกไฟล์และแทนที่ในกรณีของเหตุการณ์ดังกล่าวหรือ (ซึ่งดูเหมือนว่าปลอดภัยมากขึ้น) เพียงแค่สร้างกระบวนการขึ้นมาใหม่
quaeched

1

หลังจากค้นหาใน Google ฉันสามารถแก้ไขแป้นผิดพลาดในแล็ปท็อปของฉันทำการแมปใหม่ ปุ่มผิดพลาดทั้งหมดใน Thinkpad T400 ของฉันทำงานได้ดีหลังจากทำการแมปใหม่ นอกจากนี้ยังเป็นการถาวรโดยไม่ต้องเพิ่มโหลดบนคอร์ CPU

  • ขั้นแรกให้ค้นหาเค้าโครงแป้นพิมพ์หรือรหัสคีย์โดยใช้คำสั่งด้านล่าง

    xevv -event keyboard 
    
  • ตัวอย่างเช่นพบคีย์โค้ดของ Thinkpad T400 ดังนี้:

    Keycode of "z" key is 52
    Keycode of "x" key is 53
    Keycode of "c" key is 54
    Keycode of "v" key is 55
    Keycode of "F6" key is 72
    Keycode of "F10" key is 76
    Keycode of "F11" key is 95
    Keycode of "F12" key is 96 
    
  • การแมปคีย์อักขระ "z" "x" "c" "v" ใหม่โดยการกำหนดฟังก์ชั่นคีย์ "F6" "F10" "F11" "F12"

  • แก้ไขบรรทัดดังต่อไปนี้ (ไฟล์สำรองก่อนทำการเปลี่ยนแปลงใด ๆ เพื่อย้อนกลับอย่างง่ายดายหากสิ่งผิดปกติ)

    sudo vi /usr/share/X11/xkb/keycodes/evdev
    
  • ค้นหาบรรทัดและค่าการเปลี่ยนแปลงดังนี้:

    <AB01> = 72;
    <AB02> = 76;
    <AB03> = 95;
    <AB04> = 96;
    
  • ใส่ความคิดเห็นบรรทัดเหล่านี้หรือลบบรรทัด:

    //  <FK06> = 72;
    //  <FK10> = 76;
    //  <FK11> = 95;
    //  <FK12> = 96;
    
  • บันทึกและออก.

  • แมปคีย์พิเศษ

  • สำรองไฟล์ก่อนทำการเปลี่ยนแปลงย้อนกลับหากมีสิ่งผิดปกติ

    cd /usr/share/X11/xkb/symbols/
    
    sudo vi pc
    
  • เพิ่มหรือแก้ไขบรรทัดด้านล่างในฟังก์ชัน "xkb_symbols" edit "{"

    key [SCLK] {    [  Prior        ]   };
    key [PAUS] {    [  Next         ]   };
    
  • บันทึกและออก.

  • ล้างแคช

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


ฉันทำการแมปคีย์ลูกศร (เคอร์เซอร์) ที่เสียใหม่ไปยังคีย์อื่นโดยใช้เทคนิคนี้ เป็นเพียง (xev) และกดปุ่มใหม่เพื่อรับ scancode จากนั้นแก้ไข / usr / share / X11 / xkb / keycodes / evdev เพื่อแทนที่ keycode ดั้งเดิมของปุ่มลูกศรด้วย keycode ใหม่และลบบรรทัดของปุ่มลูกศรใหม่ด้วยต้นฉบับ scancode ฉันแสดงความคิดเห็นทุกที่ที่ฉันทำการเปลี่ยนแปลงและเก็บสำรองของไฟล์ หลังจากรีบูตมันทำงานได้อย่างสมบูรณ์รวมถึงการรวมกันเป็นกะ / ctrl / alt ด้วยปุ่มลูกศรใหม่ และการเปลี่ยนแปลงควรจะอยู่ในตำแหน่งแม้เมื่อทำการอัพเกรดแพ็คเกจและการอัพเกรดเวอร์ชั่นของระบบปฏิบัติการ
Matthew


0

เนื่องจากไฟล์. Xmodmap นั้นง่ายต่อการแก้ไขมากกว่า xkb ฉันใช้. Xmodmap เป็นไฟล์ 'source' จากนั้นแปลงเป็น xkb (มาตรฐานปัจจุบัน) และโหลดอัตโนมัติเมื่อบูตโดยใช้วิธี. bashrc

มันเป็นขั้นตอนง่ายๆไม่กี่โพสต์ที่นี่

ทำงานได้อย่างสมบูรณ์และใช้ xkb Future-Proofs เทียบกับเมื่อการสนับสนุน. Xmodmap ลดลง

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