Lấy mã khóa của một phím, từ bàn phím được tạo tùy chỉnh


12

Tôi đang cố gắng chuyển đổi một Minlist thành một máy tính có Raspberry Pi.

Đây là một danh sách nhỏ:

nhập mô tả hình ảnh ở đây

Vì vậy, tôi đã hàn ma trận của bàn phím minlist vào pcb bàn phím usb, như thế này: nhập mô tả hình ảnh ở đây

Mọi thứ đều hoạt động tốt, tôi nhận được một số phím từ bàn phím tùy chỉnh của mình. Tôi chỉ cần sắp xếp lại các phím một cách thích hợp.

Vì vậy, tôi đang cố gắng tạo một chương trình sẽ yêu cầu tôi nhấn avà bẫy mã khóa tương ứng, và sau đó với tất cả các phím trên bàn phím tùy chỉnh của tôi, để tạo ra một tệp xmodmap.

Vấn đề duy nhất tôi có là tôi không thể tìm ra làm thế nào tôi có thể nhận được mã khóa đó (và chỉ có thế!). Tôi đã thử xevnhưng có quá nhiều dữ liệu được hiển thị để lọc ra.

Tôi biết rằng tôi có thể theo dõi tất cả các mã khóa bằng tay, nhưng tôi sẽ chuyển đổi 10 Minitels, vì vậy tôi thích cách nhanh hơn!


Bạn có thể đổ (các) ROM từ Minlist (s) bạn có cho dự án MESS không? Phần cứng đó hiện không bị phá hủy và chắc chắn có tầm quan trọng lịch sử.
sendmoreinfo

Tại sao không, nhưng tôi không biết làm thế nào để làm điều đó!
xavier.seignard

Câu trả lời:


6

Tôi giả sử bạn đang cố gắng thực hiện việc này bằng shell hoặc tương tự (khác, bạn chỉ cần sử dụng trực tiếp các thư viện X). Nếu vậy, bạn có thể tìm thấy xinput --test «device-name»phân tích dễ dàng hơn nhiều.

Thật không may, nó thực sự không thân thiện với kịch bản shell. Nhưng bạn có thể làm cho nó hoạt động với stdbuf. Nó chạy cho đến khi bạn giết nó, nhưng tập lệnh shell của bạn có thể dẫn nó đến read.

Vì vậy, bạn có thể làm một cái gì đó như thế này:

stty -echo
stdbuf -oL xinput test 'AT Translated Set 2 keyboard' \
    | perl -nE 'BEGIN {$| = 1} m/^key press\s+(\d+)/ and say $1' \
    | for key in q w e r t y; do
         echo -n "Please press $key: "
         read -r keycode
         echo "key $key = $keycode"
    done
stty echo

Bạn sẽ cần sử dụng tên bàn phím chính xác thay cho "Bàn phím AT được dịch 2". Bạn có thể tìm thấy nó với xinput list:

anthony@Zia:~$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=8    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]

Thật không may, bạn phải sử dụng một thiết bị cụ thể mà bạn không thể sử dụng bàn phím lõi.

. )


cảm ơn derobert! Điều đó hoàn toàn phù hợp với nhu cầu của tôi! Tôi đã sử dụng idbàn phím thay vì tên của nó, vì tôi đã có xung đột với 2 tên giống nhau. Vì vậy xinput test 18, 18 là id của bàn phím của tôi.
xavier.seignard

nếu tôi có thể làm tương tự với một lệnh không chạy lâu (tức là dừng sau khi nhấn phím đầu tiên và trả về mã khóa) thì đó sẽ là một giấc mơ :)
xavier.seignard

@ xavier.seignard Tôi đã thử và không thể tìm thấy tiện ích nào thực hiện được điều đó. Nhưng nó khá dễ dàng để lấy nguồn xinput và làm cho nó hoạt động theo cách đó ... kiểm tra test.c, có vẻ như chức năng có liên quan print_events. Có lẽ xorg sẽ lấy một bản vá để thêm một cờ dừng lại sau n sự kiện?
derobert

@ xavier.seignard Tôi vừa chạy qua một cách để sắp xếp việc đó ... xinput --query-stateđưa ra trạng thái hiện tại và thoát ngay lập tức. Bạn có thể bận rộn lặp nó.
derobert
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.