โซลูชันที่ใช้ udev
เนื่องจาก HAL เลิกใช้แล้วและudev
ตอนนี้ใช้วิธีนี้จึงเป็นที่ต้องการมากกว่าคำตอบอื่น ๆ ของฉัน (แม้ว่าฉันคิดว่าโซลูชันที่ใช้ HAL นั้นเรียบง่ายกว่า)
อย่างไรก็ตามสำหรับปุ่มฟังก์ชั่นมากมายคุณสามารถใช้การตั้งค่าระบบ> คีย์บอร์ด> ทางลัดเพื่อผูกสคริปต์ให้ลองใช้วิธีนี้ก่อน! ช่วยให้คุณประหยัดปัญหามาก ตัวอย่างเช่นปุ่มความสว่างมันไม่ทำงาน (ฉันไม่มีเงื่อนงำทำไมไม่) ดังนั้นถ้าคุณต้องการทราบวิธีการเปลี่ยนพฤติกรรมของตัวอย่างเช่นปุ่มความสว่างให้อ่าน
หมายเหตุ : หากคุณใช้งานโน้ตบุ๊ก Samsung คุณสามารถแก้ไขปุ่มฟังก์ชั่นทั้งหมด (ขึ้นอยู่กับรุ่น) โดยติดตั้งsamsung-tools
แพคเกจจากhttp://www.voria.org/forum/
วิธีนี้จะถือว่าคุณรู้วิธีใช้เทอร์มินัลและใช้vim
โปรแกรมแก้ไข หากคุณไม่ทราบvim
โปรดแทนที่ในคำสั่งโดยทั้งหรือgedit
nano
การกำหนดแป้นพิมพ์ของคุณ
/lib/udev/findkeyboards
ควรพิมพ์แป้นพิมพ์ที่เชื่อมต่อกับคอมพิวเตอร์ในกรณีของฉัน
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
ขณะนี้มีสองตัวเลือก:
แป้นพิมพ์ USB :
หากคุณต้องการทำการแมปแป้นพิมพ์ USB ใหม่อีกครั้งให้ตรวจสอบโดยการเรียกใช้
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
โดยที่คุณต้องแทนที่ 9 ในคำสั่ง awk ด้วยหมายเลขที่ถูกต้อง ผลลัพธ์ควรคล้ายกับ
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
ซึ่งแสดงให้เห็นอย่างถูกต้องว่าแป้นพิมพ์ของฉันได้รับการจัดการผ่าน Logitech USB Receiver (อินพุต / event7 กลายเป็นเมาส์ Logitech G9 ซึ่งมีปุ่มที่ตั้งโปรแกรมได้)
แป้นพิมพ์แล็ปท็อป :
หากคุณต้องการตั้งค่าแป้นพิมพ์แล็ปท็อปใหม่คุณควรจำหมายเลขAT keyboard
ที่เป็น 4 ในกรณีของฉัน รับข้อมูล dmi สำหรับแล็ปท็อปของคุณด้วย:
cat /sys/class/dmi/id/sys_vendor
ซึ่งในกรณีของฉัน
SAMSUNG ELECTRONICS CO., LTD.
และ
cat /sys/class/dmi/id/product_name
ซึ่งในกรณีของฉัน
305U1A
กำหนดการทำแผนที่ปัจจุบันของปุ่มฟังก์ชั่นของคุณ
ตอนนี้เราสามารถกำหนด keymapping ปัจจุบันของเราโดยการฟังแป้นพิมพ์ (ใส่หมายเลขที่ถูกต้อง)
sudo /lib/udev/keymap -i input/event4
คุณสามารถออกจากคำสั่งนี้โดยใช้Escบนแป้นพิมพ์หรือCtrl+ cบนแป้นพิมพ์อื่น
หากหน้าจอของคุณเริ่มเลื่อนลงอย่างหนักให้กดEscและCtrl+ cสองสามครั้งแล้วลองอีกครั้งด้วย
sudo /lib/udev/keymap -i input/event4 2> /dev/null
หรือถ้าคุณยังมีปัญหาการเลื่อน
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
ในกรณีสุดท้ายคุณจะยังคงมีการเลื่อน แต่ถ้าคุณกดปุ่มฟังก์ชั่นพวกเขาควรไป~/keymap.log
ที่ที่คุณสามารถอ่านได้ในภายหลัง
ตอนนี้เราสามารถตรวจสอบการแมปปุ่มฟังก์ชั่นปัจจุบันของคุณได้โดยกดที่ปุ่มซึ่งจะให้รายการเช่น (นี่คือFn+ ของฉันF1ผ่านFn+ F12):
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
ตอนนี้จดรหัสสแกนที่คุณต้องการเปลี่ยนพฤติกรรม
การเปลี่ยนรหัสคีย์สำหรับรหัสสแกน
หากคุณเห็นรหัสคีย์อย่างชัดเจนไม่ครอบคลุมสิ่งที่คุณคาดหวังว่าจะต้องทำคุณสามารถดูได้/usr/include/linux/input.h
ภายใต้คีย์และปุ่มเพื่อดูว่ามีรหัสคีย์ที่ตรงกับสิ่งที่คุณต้องการจะเกิดขึ้นจริงหรือไม่ รหัสคีย์ที่มีอยู่ในรูปแบบKEY_KEYCODE
และคุณต้องจดบันทึกส่วนหลังลงKEY_
ในตัวพิมพ์เล็ก บางครั้งการเปลี่ยนแปลงนี้ก็เพียงพอที่จะแก้ปัญหา
ปุ่มความสว่างมักจะมีรหัสที่ถูกต้องที่เกี่ยวข้องกับพวกเขาและนี่คือสิ่งที่ไม่อนุญาตให้ทำการแมปใหม่ ดังนั้นเราต้องเปลี่ยนเป็นรหัสอื่น ๆ เราจะใช้prog1
และprog2
สำหรับตัวอย่างนี้เพราะสิ่งเหล่านี้ไม่ได้อยู่ในการใช้งานบนคอมพิวเตอร์ของฉัน แต่คุณยังสามารถใช้f13
ผ่านf24
หรือf20
ผ่านf24
ถ้าคุณมีแป้นพิมพ์แอปเปิ้ลที่มีF1ผ่านF19ปุ่ม
สร้าง keymap ที่กำหนดเอง :
สร้างไฟล์ keymap ในไดเรกทอรีที่/lib/udev/keymaps
มีชื่อที่เหมาะสมดูที่ผลลัพธ์ของls /lib/udev/keymaps
เพื่อดูชื่อที่เหมาะสม ฉันจะไปด้วยcustom-brightness
เพื่อจุดประสงค์ของคำถามนี้
sudo vim /lib/udev/keymaps/custom-brightness
และป้อนรหัสสแกนของปุ่มที่คุณต้องการเปลี่ยนตามด้วย scancodes ที่คุณต้องการให้มี custom-brightness
หน้าตาของฉันเป็นแบบนี้:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
สร้างไฟล์รีลีสคีย์แบบกำหนดเอง เฉพาะในกรณีที่คุณเปลี่ยนแป้นพิมพ์แล็ปท็อปของคุณ :
บางครั้งเหตุการณ์การปล่อยปุ่มไม่ถูกต้องส่งผลให้คอมพิวเตอร์วางสาย เพื่อหลีกเลี่ยงปัญหานี้เราจะเขียนไฟล์การปล่อยกุญแจที่กำหนดเอง
sudo vim /lib/udev/keymaps/force-release/custom-brightness
ไฟล์นี้ควรมีรหัสสแกนที่เหมือนกันกับของฉัน
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
ตรวจสอบให้แน่ใจว่ามีการโหลดการแมปใหม่ในไฟล์กฎ
ตอนนี้เราต้องตรวจสอบให้แน่ใจว่าการโหลดการแมปของคุณ เราสามารถทำได้โดยการแก้ไข/lib/udev/rules.d/95-keymap.rules
ดังนั้นจึงเป็นการดีที่จะทำการสำรองข้อมูล
อีกครั้งเรามีสองตัวเลือก:
แป้นพิมพ์ USB :
เนื่องจากคุณมีแป้นพิมพ์ USB คุณควรเพิ่มรายการของคุณภายใต้LABEL="keyboard_usbcheck"
และควรอยู่เหนือรายการอื่น ๆ ของผู้ผลิตแป้นพิมพ์ของคุณ นี่เป็นเพราะคีย์บอร์ดของฉันด้วย
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
ถูกจับคู่โดยกฎข้อใดข้อหนึ่งแล้วมิฉะนั้นจะถูกเขียนทับ
เพิ่มกฎต่อไปนี้ซึ่งคุณควรเปลี่ยนID_VENDOR_ID
และID_MODEL_ID
และชื่อของ keymap ของคุณอย่างเหมาะสม
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
แป้นพิมพ์แล็ปท็อป :
ถ้า/lib/udev/findkeyboards
รายงานแป้นพิมพ์แล็ปท็อปของคุณเป็นAT keyboard
กฎของคุณควรจะไปอยู่ภายใต้การมิฉะนั้นวางไว้ใต้LABEL="keyboard_vendorcheck"
LABEL="keyboard_modulecheck"
ใส่ไว้ในรายการอื่น ๆ สำหรับผู้ผลิตแล็ปท็อปของคุณอีกครั้ง เพิ่มกฎต่อไปนี้ ( SAMSUNG ELECTRONICS CO., LTD.
ยาวหน่อยดังนั้นฉันจึงใช้สัญลักษณ์แทน)
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
ตอนนี้เพิ่มกฎเพื่อ/lib/udev/rules.d/95-keyboard-force-release.rules
สำรองข้อมูลด้วย
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
อีกครั้งภายใต้รายการอื่น ๆ ของผู้ผลิตของคุณเพิ่ม
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
ตรวจสอบให้แน่ใจ udev โหลดกฎใหม่
เพื่อโหลดกฎใหม่ทำงาน
sudo adevadm trigger
หมายเหตุ: udevadm control --reload-rules
(ยังอยู่ในคำแนะนำในเว็บไซต์หลายแห่ง) ไม่ทำงาน
ตอนนี้ตรวจสอบว่ากฎถูกนำไปใช้เรียบร้อยแล้วโดย
sudo /lib/udev/keymap -i input/event4
ซึ่งตอนนี้ควรรายงานถึงปุ่มความสว่าง
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
ทำการแมปคีย์ใหม่อีกครั้งในการตั้งค่าระบบ
หากขั้นตอนสุดท้ายแจ้งรหัสคีย์ที่ถูกต้องคีย์นั้นจะเริ่มทำงานโดยอัตโนมัติ
เพื่อความสว่างที่คุณยังคงต้องผูกกุญแจสู่ใบซึ่งเป็นไปได้ตอนนี้ใช้ระบบการตั้งค่า> คีย์บอร์ด> ทางลัด
สนุก
หมายเหตุ :
หากคีย์ของคุณมีรหัสคีย์ผิดและได้รับการแก้ไขโดยวิธีการนี้โปรดปฏิบัติตามคำแนะนำใน/usr/share/doc/udev/README.keymap.txt.gz
(คุณสามารถเปิดได้โดยไม่ต้องคลายการใช้zless
) และส่งผลลัพธ์ของคุณทางอีเมลที่กล่าวถึงที่นั่นการเปลี่ยนแปลงสามารถรวมไว้ในรุ่นถัดไป ผู้ใช้หลายคนจะได้รับประโยชน์!
ขอบคุณมากสำหรับโพสต์ที่เป็นประโยชน์นี้โดย Vaidas Jablonskis