2009-05-17 30 views
25

Phiên bản ngắn của những gì tôi muốn thực hiện: Tôi có một bàn đạp chân (INFINITY-IN-USB-1, nếu đó là bất kỳ lợi ích) được thực hiện như một thiết bị HID chung, và tôi muốn nó được cư xử như kiểm soát và các phím alt trên Linux. Tôi đang tìm kiếm thứ gì đó ở cấp độ X, tức là không chỉ các chương trình riêng lẻ.Làm thế nào để nắm bắt đầu vào HID thô trên Linux?

Phiên bản dài hơn: Tôi có thiết lập này hoạt động trong Windows XP bằng cách gọi dll RegisterRawInputDevices và GetRawInputData và nghe đầu vào trong cửa sổ ẩn. Tất cả được thực hiện với một kịch bản khá đơn giản Autohotkey (có thể đăng ở đây nếu có ai quan tâm). Vấn đề là, không cần thêm bất kỳ trình điều khiển nào, v.v. chỉ cần Windows dll gốc.

Tôi muốn thiết lập này hoạt động trên Linux (cụ thể hơn Gnome trong Ubuntu, nhưng thỉnh thoảng tôi sử dụng trình quản lý cửa sổ/distro khác, vì vậy giải pháp về mức X được đánh giá cao). Bàn đạp chân này không tự đăng ký như bàn phím hoặc phím điều khiển, nhưng là thiết bị HID với UsagePage 12, Cách sử dụng 3. Tôi nhận thấy rằng Ubuntu mới nhất có thể phát hiện và sử dụng các phím yêu thích trên Bàn phím Tự nhiên của Microsoft. *. Tôi sử dụng các khóa đó trên Windows bằng cách sử dụng cùng phương pháp như tôi sử dụng bàn đạp chân (nghĩa là không có phần mềm đi kèm). Vì vậy, tôi cho rằng điều này bàn đạp có thể làm việc trên Linux là tốt, nhưng câu hỏi là làm thế nào?

[Tôi mới đến những thứ cấp thấp hơn trên Linux, vì vậy hãy hào phóng với các liên kết để giới thiệu hoặc hướng dẫn bất cứ khi nào áp dụng.]

* Đối với những người không nằm trong bí quyết, các thanh ghi Bàn phím Microsoft Natural như cả bàn phím thông thường và thiết bị HID chung. Nếu không có một số ứng dụng (chẳng hạn như ứng dụng đi kèm) biết cách diễn giải đầu vào HID, các phím thông thường sẽ hoạt động nhưng các phím yêu thích và các phím chức năng đặc biệt là vô ích.


Để làm rõ, Linux KHÔNG thấy bàn đạp ép làm đầu vào. Nó nhận ra thiết bị USB, nhưng xev không cho đầu ra cho bàn đạp. Tôi đã thấy báo cáo của người dùng succesefully bằng cách sử dụng bàn đạp dưới WINE cho phần mềm sao chép, nhưng điều đó phải làm việc theo cách Windows và không cung cấp những gì tôi muốn (mà làm cho bàn đạp trông giống như một bàn phím cho tất cả các ứng dụng Linux bản địa). Tôi tự hỏi liệu một số trình điều khiển bàn phím Linux cấp thấp có cần thiết không?


Dưới đây là một số thông tin hơn: Nếu tôi phát hành này tại nhà ga

cat /dev/usb/hiddev0 

(dev/usb/hiddev0 là bàn đạp của tôi), tôi nhận được mã số liệu tương ứng với máy ép đạp của tôi. Đó là một sự khởi đầu. Tôi biết những gì các mã thô có nghĩa là: trong nhị phân, 0001, 0010, 0100 tương ứng với mỗi bàn đạp, tương ứng, và sự kết hợp của bàn đạp ép gửi kết hợp của những số nhị phân, và phát hành đầu vào kích hoạt bàn đạp của bất cứ bàn đạp vẫn đang được nhấn (nếu tất cả đạp lên, 0000 được gửi).

Làm cách nào để X nhận được dev/usb/hiddev0 và dịch mã thô thành mã khóa đặc biệt để tôi có thể ánh xạ chúng bằng xmodmap hoặc gì đó?

Trả lời

16

Bạn sẽ muốn uinput. Bạn sẽ nghe trên/dev/usb/hiddev0 của mình và sau đó tạo các sự kiện mới mà bạn sẽ gửi trên /dev/input/uinput.

này giải thích nó và đưa ra một ít hướng dẫn: Using uinput driver in Linux- 2.6.x to send user input {Đây là EInfochips "Bảng điều khiển" ấn phẩm phát hành tháng 1 năm 2007 "Tip of the Month" bài báo đề cập trên this lưu trữ trang}.

+2

Bạn có thể xây dựng thêm một chút không? Làm thế nào để nghe/dev/usb/hiddev0 lập trình (bài viết bạn chỉ liên kết nói về uinput)? Chương trình kết quả (mà lắng nghe trên hiddev và gửi các sự kiện bàn phím/chuột thông qua uinput) sẽ phải chạy như một daemon, tôi giả sử? – polyglot

+2

Vâng, tôi cho rằng câu hỏi của bạn là bạn đã biết cách đọc hiddev0. Bạn có thể sẽ viết một daemon. Bắt đầu bằng cách viết một chương trình liên tục đọc hiddev0 và in ra các lần nhấn. Sau đó, bạn có thể sửa đổi nó để phát ra các sự kiện mới thông qua uinput. Điều này về cơ bản sẽ tái tiêm những sự kiện này trở lại vào hạt nhân, nhưng như sự kiện bàn phím hoặc chuột (bạn chọn). Không cần thay đổi đối với X. –

+5

Điều đó dường như là một bài viết rất phổ biến trên uinput. Được liên kết từ khắp nơi trên web. Than ôi, nó không còn nữa và Google chỉ tìm thấy một bản PDF được chuyển đổi thành văn bản. Có ai có bản PDF gốc ở một nơi mà nó có thể được chia sẻ không? –

0

Tôi sử dụng cho các ràng buộc/shorcuts của tôi kết hợp compiz, easystroke và xmacro.

Đối với nhu cầu của bạn, tôi nghĩ phần còn thiếu là xbindkeys.Tôi đã tìm thấy link này cho bạn rằng có lẽ sẽ giúp bạn thiết lập:

http://linux-trackball.dreamhosters.com/

Tôi tự hỏi nào dù có một cách để phân biệt giữa một vài thiết bị chuột.

+3

Tôi đã biết về xbindkeys vv nhưng vấn đề là X không nhận ra bàn đạp của tôi ép nên xbindkeys như bây giờ là vô ích.Ngay cả tác giả của liên kết bạn đưa ra cũng có một số nút trên trackball của mình vẫn chưa hoạt động. Câu hỏi của tôi là làm thế nào để có được những người không làm việc các phím làm việc, không phải về cách sử dụng các phím đã làm việc. Xin lỗi vì sự nhầm lẫn. – polyglot

2

Bạn nên điều tra lircd. Nó diễn giải đầu vào từ các điều khiển từ xa. Một số điều khiển từ xa được hỗ trợ dường như thể hiện mình là thiết bị hid chung, vì vậy bạn có thể có được thiết bị của bạn để nói chuyện với lircd.

2

Thiết bị có hiển thị trong/dev/input không? nếu có, hãy sử dụng trình điều khiển X "evdev" để móc nó giống như cách bạn làm cho bàn phím hoặc chuột.

2

Vấn đề tương tự ở đây, nhưng với các phím đặc biệt trên bàn phím không dây. Tôi cảm nhận được nỗi đau của bạn.

Anyways, cố gắng để có được điều này để làm việc, heres phương pháp của tôi:

  1. sleep 10; killall cat sau đó nhanh chóng trong thiết bị đầu cuối khác: cat /dev/usb/hiddevice0 > key1.usbdump và nhấn/sử dụng thiết bị. Điều này sẽ đổ kết xuất nhị phân của hiddevice cho khóa đó.
  2. Tôi nhanh chóng tấn công cùng một tập lệnh python để đọc các sự kiện đầu vào và sự cố đáng ngờ. Cho đến nay nó hoạt động cho lần đầu tiên phím được nhấn. Điều này tương tự như những gì Adam đề nghị, nhưng tôi nghĩ rằng đầu vào là khó khăn hơn để lập trình/sử dụng mặc dù có lẽ thanh lịch hơn, và python là có sẵn.

Vì vậy, đây là một công việc đang tiến (chỉ hoạt động cho lần đầu tiên ép), nhưng có lẽ một cái gì đó như thế này có thể làm việc cho bạn:

sf1 = open("test.usbdump").read() # read the earlier usb dump from hiddevice 
kb = open("/dev/usb/hiddev0") 
while 1: 
    # Prints true if the specific key has been read. 
    print (kb.read(len(sf1)) == sf1) 
    # Basically all that has to be done is if^is true, then fire off the event you want. 

Nếu bất cứ ai có thể giúp tôi ra với chương trình của tôi hay nếu tôi làm điều này sai, xin vui lòng cho tôi biết. ;)

Tôi nhận thấy rằng có một số tiêu đề được đưa vào vùng đổ bộ ban đầu của hiddevice. Sử dụng một số chỉnh sửa hex phước lành và bit differencing, bạn có thể tìm thấy giá trị nào là quan trọng và thực hiện kiểm tra cho chúng trong python. (Ví dụ: chữ số thập phân "B0" có nghĩa là một phím chức năng đặc biệt đã được nhấn trên bàn phím của tôi và sau đó có thêm thông tin về phím nào đã được nhấn vv ..)

Kết quả cuối cùng của tôi là: hiddevice0 dường như treo và ngừng cho dữ liệu sau một thời gian, không chắc chắn tại sao, nhưng thay vào đó, tôi sử dụng/dev/input/event * (Nó có thể làm việc cho bạn quá,) và điều đó có vẻ hoạt động tốt hơn. Một lần nữa, cùng một phân tích cú pháp và phân tích cú pháp cấp thấp dẫn đến thành công. Trên đường đi, tôi thấy rằng sudo cat /dev/input/event3 | hexdump là cực kỳ hữu ích trong việc xác định byte nào là quan trọng đối với bạn.

Vì vậy, nếu bạn có bàn phím IBM Sk-8812 và muốn sử dụng các phím đặc biệt, bạn có thể nói chuyện với tôi để lấy tập lệnh tôi đã sử dụng.

+0

Trong cùng một thiết bị đầu cuối, bạn có thể gõ (sleep 10; killall cat) & cat/usb/dev/hiddev0> key1.usbdump –

Các vấn đề liên quan