Làm thế nào là mã chính được ánh xạ đến hành động thích hợp?


18

Sau khi tìm ra cách thay đổi ánh xạ mã quét thành mã khóa bằng cách sử dụng udev, hãy xem câu hỏi này , tôi đã tự hỏi làm thế nào những mã khóa đó (hoặc sự kiện nếu bạn sẽ) được ánh xạ tới hành động thích hợp.

Vì vậy, ví dụ, nếu bạn nhấn volume uptrên bàn phím, mã quét sẽ được gửi sau đó sẽ được chuyển đổi thành volumeupmã khóa. Nhưng làm thế nào mã khóa này bị chặn, âm lượng bật lên và thông báo phù hợp được hiển thị?

Tôi đoán là ở đâu đó một kịch bản phải được gọi, vì vậy tôi muốn biết những kịch bản đó ở đâu.

EDIT: Các mã khóa tôi đề cập không bị nhầm lẫn với các mã khóa xevtrả về, nhưng tôi cũng quan tâm đến các mã đó;)


3
Tôi không đồng ý, ví dụ thông báo rất cụ thể đối với Ubuntu, vì vậy tôi muốn biết thông báo đã được gửi như thế nào . Tôi đoán là ở đâu đó một kịch bản phải được gọi, vì vậy tôi muốn biết những kịch bản đó ở đâu.
Burger Gerhard

2
Đây là một câu hỏi dành riêng cho Ubuntu vì cách xử lý của Ubuntu đã thay đổi trong những năm IIRC. Thật thú vị khi biết chuỗi sự kiện trong Ubuntu về sự kiện nhấn phím nóng kích hoạt các hành động thích hợp. Mục đích có thể: kiểm soát độ sáng tùy chỉnh , gỡ lỗi các vấn đề quan trọng, v.v.
gertvdijk

2
@Seth Có vẻ lỗi thời. HAL bị từ chối từ lâu, kể từ ngày 10.04 . Nó cũng thiếu thông tin về cách các thông báo trên màn hình được kích hoạt.
gertvdijk

1
Hôm nay tôi đã xem qua wiki.ubfox.com/Hotkeys/Troubledh Boot , cung cấp một số gợi ý hay (có một liên kết đến wiki.ubfox.com/Hotkeys/Arch architecture rất nhiều thông tin). Tôi nghĩ rằng câu trả lời của Stephen Ostermiller là đúng hướng, nhưng tôi muốn tìm những kịch bản đó và có thể thay đổi chúng;)
Gerhard Burger

1
^^ Thông tin này dường như đã lỗi thời, không có keybindings nào dưới gnome-settings-daemon ở đây ... Rất nhiều lượt truy cập cho độ sáng trong phần compiz mặc dù (Tôi đoán là có sự thống nhất?) Ai biết cách notify-osdhoạt động? Tôi nghĩ đó là nơi gửi thông báo độ sáng ...
Gerhard Burger

Câu trả lời:


6

Ok, đã tìm thấy điều này tại https://help.ubfox.com/community/MultidiaKeys

Khi bạn nhấn một phím trên bàn phím, nhân linux sẽ tạo một scancode thô cho nó (nếu nó được gán). Mỗi scancode có thể được ánh xạ tới một mã khóa. Đây là ở cấp độ kernel. X có tổng số cách ánh xạ các khóa độc lập (gần như): X đọc bảng mã khóa nhân khi khởi động, sau đó ánh xạ mã khóa vào bảng mã khóa độc lập của nó (giống như mã khóa nhân nhưng khác nhau :)). Sau đó, mỗi mã khóa có thể được ánh xạ tới một keyym, nghĩa là một chuỗi đại diện cho một khóa hoặc đề xuất một hành động. Do đó, để các khóa của chúng ta có đầy đủ chức năng, chúng cần có mã khóa / mã khóa nhân cộng với mã khóa / keyym X. Điều này có vẻ kỳ lạ, nhưng các nhà phát triển X có lý do của họ để giữ một ánh xạ bàn phím riêng biệt từ kernel. Nó không khó chút nào, chỉ là một thủ tục khá tẻ nhạt.

Vì vậy, các mã khóa được ánh xạ tới các phím, Vậy các phím này ở đâu? Tôi đã tìm thấy và trả lời từ câu hỏi này: Tôi tìm thấy danh sách tất cả các từ khóa X ngày nay ở đâu? Vì chúng ta đang nói về các phím âm lượng, nó sẽ được tìm thấy trong XF86keysym.hmã nguồn được đề cập trong câu trả lời.

Trong tập tin đó trên máy tính của tôi, tôi tìm thấy phần sau cho âm lượng:

#define XF86XK_AudioLowerVolume 0x1008FF11   /* Volume control down        */
#define XF86XK_AudioMute    0x1008FF12   /* Mute sound from the system */
#define XF86XK_AudioRaiseVolume 0x1008FF13   /* Volume control up          */

Lạ ... giá trị khác với bất cứ thứ gì khác, có thể có nhiều hệ thống để xử lý các khóa? http://crunchbang.org/forums/viewtopic.php?id=16656


Tôi đang sử dụng Xubfox và để điều khiển các phím, tôi cần ánh xạ các hành động theo cách thủ công (như thế này Làm cách nào để thay đổi các phím tắt trong xubfox? ). Tuy nhiên, các thông báo có vẻ độc lập như thể chúng đang bấm phím và hành động tương ứng, điều đó có nghĩa là các chương trình khác trong Ubuntu được thiết lập theo cách này, do đó không cần phải ánh xạ tập lệnh tới các phím.

Vì vậy, tôi khá chắc chắn rằng các chương trình hiện đang chọn khóa (vì vậy không tìm thấy đoạn mã nào).

Trong Xubfox tôi gặp vấn đề này với Pulse Audio và sử dụng các tập lệnh tùy chỉnh để thay đổi âm lượng, có vẻ như Pulse đã chặn phím Mute , phím tắt tiếng tắt tiếng Alsa và PulseAudio, nhưng chỉ tắt tiếng Alsa cho các cách giải quyết thú vị.


Kiểm tra điều này về NotifyOSD https://wiki.ubfox.com/NotifyOSD#Volume_changes

Nếu bạn xem sơ đồ này: https://wiki.ubfox.com/NotifyOSD#Arch architecture

Đặc biệt là cái này: nhập mô tả hình ảnh ở đây

Nó cho thấy rằng có một "trình nghe khóa phần cứng" nhận dạng DBus hoặc HAL? Sau đó, nó "lấy phần tử hình ảnh từ hệ thống" mà các biểu tượng âm thanh và độ sáng nằm trong nguồn của Notify-OSD, và sau đó tạo ra bong bóng từ đó.


Đây là tất cả khó hiểu điên rồ, nhưng theo như tôi hiểu nó (cho đến nay):

raw scancode (ví dụ: e016)> keycode (ví dụ 160)> keyym (ví dụ: nghe chương trình)


Có vẻ như điều này đang nhận được ở đâu đó! Được đánh dấu là CW từ đầu nên tôi đoán bạn vẫn đang tiến bộ? :)
gertvdijk

vâng, tôi cần xem xét thêm, sơ đồ có rất nhiều dấu hỏi trong đó.
Mateo

Có phải bạn đã vô tình biến nó thành một câu trả lời wiki cộng đồng? Có lẽ hỏi một mod để hủy bỏ nó ... Oh và những đồ thị có nhiều khả năng một chút trong ngày, vì HAL bị phản đối vì một thời gian dài ... Vâng ít nhất chúng tôi nhận được ở đâu đó: D
Gerhard Burger


@gertvdijk Tôi biết, nhưng sẽ thật xấu hổ cho tất cả những người ủng hộ mà anh ấy sẽ bỏ lỡ;)
Gerhard Burger

1

Trong hầu hết các trường hợp, không có tập lệnh nào được chạy. Chúng gây ra các sự kiện được gửi đến trình quản lý cửa sổ hoặc trình nền cài đặt. Lần duy nhất tôi biết về kịch bản trong quy trình là khi bạn định cấu hình các ràng buộc khóa tùy chỉnh. Đối với các phím bấm tùy chỉnh, bạn có thể thêm các dòng lệnh (tệp thực thi hoặc tập lệnh) và ràng buộc chúng với các khóa.

Vui lòng xem câu trả lời này mà tôi đã viết cho một câu hỏi về sao lưu các phím bấm trong Ubuntu: Phím tắt bàn phím Gnome được lưu trữ ở đâu? Tôi có một tập lệnh sao lưu hoặc khôi phục tất cả các keybindings, bao gồm cả các keybindings tùy chỉnh. Nếu bạn chạy tập lệnh, bạn có thể thấy nơi lưu trữ các phím bấm được lưu trữ và ứng dụng nào sẽ được thông báo về sự kiện chính.


Sau đó, các thông báo trên máy tính được kích hoạt như thế nào?
Burger Gerhard

Tôi tin rằng daemon cài đặt gnome chịu trách nhiệm kích hoạt những người trong trường hợp âm lượng và độ sáng chẳng hạn.
Stephen Ostermiller

2
Tôi đã chạy tập lệnh của bạn, nhưng dường như tất cả những gì cần làm là lấy các phím tắt mà bạn có thể truy cập bằng Cài đặt hệ thống> Bàn phím> Phím tắt , tôi không tìm thấy bất kỳ tham chiếu nào về độ sáng.
Burger Gerhard

kịch bản tuyệt vời để có được phím shoutcut.
Mateo

0

Câu trả lời liên quan đến Trình điều khiển .

Mỗi phần cứng phải có trình điều khiển để tương tác với hệ điều hành.

Trích dẫn http://www.linuxforu.com/2010/11/under Hiểu-linux-device-dvers / :

Một trình điều khiển ổ đĩa, quản lý, điều khiển, chỉ đạo và giám sát thực thể theo lệnh của nó. Trình điều khiển xe buýt làm gì với xe buýt, trình điều khiển thiết bị làm với thiết bị máy tính (bất kỳ phần cứng nào được kết nối với máy tính) như chuột, bàn phím, màn hình, đĩa cứng, máy ảnh Web, đồng hồ, v.v.

Hơn nữa, một phi công người Hồi giáo có thể là một người hoặc thậm chí là một hệ thống tự động được giám sát bởi một người (chẳng hạn như một hệ thống điều khiển tự động trong máy bay). Tương tự, một phần cứng cụ thể có thể được điều khiển bởi một phần mềm (trình điều khiển thiết bị) hoặc có thể được điều khiển bởi một thiết bị phần cứng khác, do đó trình điều khiển thiết bị phần mềm có thể được điều khiển. Trong trường hợp sau, một thiết bị điều khiển như vậy thường được gọi là bộ điều khiển thiết bị. Điều này, là một thiết bị, thường cũng cần một trình điều khiển, thường được gọi là một trình điều khiển xe buýt.

Một thiết bị có một thanh ghi thiết bị lưu trữ các bit Control / Status và Data bit. Bất cứ khi nào một số dữ liệu cần được truyền, nó thường được gửi bằng cách đặt các bit dữ liệu.

Vì vậy, bất cứ khi nào bạn nhấn một số phím trên bàn phím, một số dữ liệu được ghi trên thanh ghi. Các bit đó được đọc bởi trình điều khiển thiết bị và hành động thích hợp được thực hiện. Đây là lời giải thích ngắn.

Liên kết:


3
Uhm ... Tôi không nghĩ các trình điều khiển thực sự có bất kỳ khái niệm nào về ý nghĩa của phím tôi nhấn trên bàn phím. Một số thiết bị phím nóng đặc biệt trong máy tính xách tay có thể cần trình điều khiển cho việc này - nhưng điều này không bao gồm các phím nóng đa phương tiện thông thường như "tăng âm lượng". Điều này phải được bao phủ trong một khu vực phổ biến hơn của kernel / X / DE. Tôi cũng nghĩ rằng các tài liệu tham khảo rất rộng về lập trình trình điều khiển thiết bị Linux kerner.
gertvdijk

Tôi nghĩ rằng đối với hầu hết các bàn phím hiện đại, Ubuntu sử dụng evdevtrình điều khiển, nhưng tôi không thấy nó hữu ích như thế nào ở đây ...
Gerhard Burger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.