Giải pháp sử dụng udev
Vì HAL không được dùng nữa và udev
hiện đang được sử dụng, nên cách tiếp cận này được ưa thích hơn câu trả lời khác của tôi (mặc dù tôi nghĩ rằng giải pháp sử dụng HAL đơn giản hơn).
Tuy nhiên, đối với nhiều phím chức năng, bạn chỉ cần sử dụng Cài đặt hệ thống> Bàn phím> Phím tắt để liên kết tập lệnh, trước tiên hãy thử điều này! Nó giúp bạn tiết kiệm rất nhiều rắc rối. Ví dụ, các phím độ sáng không hoạt động (tôi không biết tại sao không), vì vậy nếu bạn muốn biết cách thay đổi hành vi của ví dụ như các phím độ sáng, hãy đọc tiếp.
LƯU Ý : Nếu bạn đang chạy một máy tính xách tay Samsung, bạn có thể sửa tất cả các phím chức năng (tùy theo kiểu máy) bằng cách cài đặt samsung-tools
gói từ http://www.voria.org/forum/
Điều này giả định rằng bạn biết cách sử dụng thiết bị đầu cuối và sử dụng vim
trình chỉnh sửa. Nếu bạn không biết vim
hãy thay thế nó trong các lệnh bằng một trong hai gedit
hoặc nano
.
Xác định bàn phím của bạn
/lib/udev/findkeyboards
nên in bàn phím được kết nối với máy tính, trong trường hợp của tôi
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
Bây giờ có hai lựa chọn:
Bàn phím USB :
Nếu bạn muốn sắp xếp lại bàn phím USB, hãy kiểm tra chúng bằng cách chạy
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
trong đó bạn phải thay thế số 9 trong câu lệnh awk bằng số chính xác. Đầu ra phải tương tự như
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
điều này cho biết chính xác rằng bàn phím của tôi được xử lý thông qua Bộ thu USB Logitech của tôi (đầu vào / event7 hóa ra là chuột Logitech G9 có một số nút có thể lập trình được).
Bàn phím máy tính xách tay :
Nếu bạn muốn sắp xếp lại bàn phím máy tính xách tay của mình, bạn nên nhớ số cho số AT keyboard
4 trong trường hợp của tôi. Cũng nhận được thông tin dmi cho máy tính xách tay của bạn:
cat /sys/class/dmi/id/sys_vendor
đó là trong trường hợp của tôi
SAMSUNG ELECTRONICS CO., LTD.
và
cat /sys/class/dmi/id/product_name
đó là trong trường hợp của tôi
305U1A
Xác định ánh xạ hiện tại của các phím chức năng của bạn
Bây giờ chúng tôi có thể xác định sơ đồ bàn phím hiện tại của mình bằng cách nghe bàn phím (chèn số chính xác)
sudo /lib/udev/keymap -i input/event4
bạn có thể thoát lệnh này bằng cách sử dụng Esctrên bàn phím hoặc Ctrl+ ctrên bàn phím khác.
Nếu màn hình của bạn bắt đầu cuộn xuống rất mạnh, hãy bấm Escvà Ctrl+ cmột vài lần và thử lại với
sudo /lib/udev/keymap -i input/event4 2> /dev/null
hoặc, nếu bạn vẫn gặp sự cố cuộn
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
Trong trường hợp cuối cùng, bạn vẫn sẽ có cuộn nhưng nếu bạn nhấn các phím chức năng thì chúng sẽ đi vào ~/keymap.log
nơi bạn có thể đọc chúng sau này.
Bây giờ chúng tôi có thể kiểm tra ánh xạ hiện tại của các phím Chức năng của bạn bằng cách nhấn chúng, danh sách này sẽ cung cấp cho bạn một danh sách như (đây là từ Fn+ F1đến Fn+ F12) của tôi:
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
Bây giờ hãy viết mã quét mà bạn muốn thay đổi hành vi.
Thay đổi mã khóa cho mã quét
Nếu bạn thấy mã khóa rõ ràng không bao gồm những gì bạn mong đợi khóa sẽ làm, bạn có thể xem /usr/include/linux/input.h
bên dưới Phím và nút để xem có mã khóa nào phù hợp hơn với những gì bạn thực sự muốn xảy ra không. Các mã khóa có định dạng KEY_KEYCODE
và bạn phải ghi lại phần sau KEY_
bằng chữ thường. Đôi khi thay đổi điều này là đủ để giải quyết vấn đề.
Tuy nhiên, các phím độ sáng thường có mã khóa phù hợp với chúng và đây là thứ không cho phép chúng được ánh xạ lại. Vì vậy, chúng ta cần thay đổi chúng thành các mã khóa khác. Chúng tôi sẽ sử dụng prog1
và prog2
cho ví dụ này vì đây không phải là được sử dụng trên máy tính của tôi, tuy nhiên bạn cũng có thể sử dụng f13
thông qua f24
, hoặc f20
thông qua f24
nếu bạn có một bàn phím của Apple trong đó có F1thông qua F19phím.
Tạo một sơ đồ bàn phím tùy chỉnh :
Tạo một tệp sơ đồ bàn phím trong thư mục /lib/udev/keymaps
với một tên phù hợp, hãy xem đầu ra của ls /lib/udev/keymaps
để xem các tên phù hợp. Tôi đi với custom-brightness
mục đích của câu hỏi này.
sudo vim /lib/udev/keymaps/custom-brightness
và nhập mã quét của các phím bạn muốn thay đổi theo sau là các đoạn mã bạn muốn chúng có. Tôi custom-brightness
trông như thế này:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
Tạo một tệp phát hành khóa tùy chỉnh. Chỉ khi bạn thay đổi bàn phím máy tính xách tay của bạn :
Đôi khi, sự kiện phát hành khóa không được gửi đúng cách, khiến máy tính bị treo. Để tránh điều này, chúng tôi cũng sẽ viết một tệp phát hành khóa tùy chỉnh
sudo vim /lib/udev/keymaps/force-release/custom-brightness
tập tin này nên chứa các mã quét giống nhau, tôi trông giống như
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
Đảm bảo rằng ánh xạ mới được tải trong các tệp quy tắc
Bây giờ chúng tôi cần đảm bảo rằng ánh xạ của bạn đã được tải. Chúng tôi có thể làm điều này bằng cách chỉnh sửa /lib/udev/rules.d/95-keymap.rules
, vì vậy thật thông minh khi tạo bản sao lưu
Một lần nữa chúng ta có hai lựa chọn:
Bàn phím USB :
Vì bạn có bàn phím USB, bạn nên thêm mục nhập bên dưới LABEL="keyboard_usbcheck"
và nó sẽ vượt qua các mục khác của nhà sản xuất bàn phím của bạn. Điều này là do bàn phím của tôi với
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
đã được khớp với một trong các quy tắc và nếu không, nó sẽ bị ghi đè.
Thêm quy tắc sau đây, nơi bạn nên thay đổi ID_VENDOR_ID
và ID_MODEL_ID
và tên của sơ đồ bàn phím của bạn một cách phù hợp
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
Bàn phím máy tính xách tay :
Nếu /lib/udev/findkeyboards
báo cáo bàn phím máy tính xách tay của bạn là AT keyboard
quy tắc của bạn nên đi theo LABEL="keyboard_vendorcheck"
, nếu không hãy đặt nó dưới LABEL="keyboard_modulecheck"
. Một lần nữa đặt nó dưới các mục khác cho nhà sản xuất máy tính xách tay của bạn. Thêm quy tắc sau ( SAMSUNG ELECTRONICS CO., LTD.
hơi dài nên tôi đã sử dụng ký tự đại diện)
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Bây giờ cũng thêm một quy tắc để /lib/udev/rules.d/95-keyboard-force-release.rules
sau khi sao lưu nó
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
Một lần nữa dưới các mục khác của nhà sản xuất của bạn thêm
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
Đảm bảo udev tải các quy tắc mới
Để tải các quy tắc mới chạy
sudo adevadm trigger
LƯU Ý: udevadm control --reload-rules
(vẫn trong hướng dẫn trên nhiều trang web) không hoạt động.
Bây giờ hãy kiểm tra xem các quy tắc đã được áp dụng thành công chưa
sudo /lib/udev/keymap -i input/event4
Bây giờ sẽ báo cáo cho các phím độ sáng
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Ánh xạ lại các phím trong Cài đặt hệ thống
Nếu bước cuối cùng báo cáo mã khóa chính xác, các phím sẽ tự động hoạt động (trong trường hợp đầu tiên chúng có mã khóa sai).
Đối với độ sáng, bạn vẫn phải liên kết các phím với một đoạn mã có thể sử dụng bằng Cài đặt hệ thống> Bàn phím> Phím tắt .
Thưởng thức
Ghi chú :
Nếu khóa của bạn có mã khóa sai và được sửa theo phương pháp này, vui lòng làm theo hướng dẫn trong /usr/share/doc/udev/README.keymap.txt.gz
(bạn có thể mở mã này mà không cần giải nén zless
) và gửi kết quả của bạn các địa chỉ email được đề cập ở đó, sau đó có thể đưa vào các thay đổi trong bản phát hành tiếp theo. Nhiều người dùng sẽ được hưởng lợi!
Rất cám ơn bài viết hữu ích này của Vaidas Jablonskis.