Ghi lại mọi tổ hợp phím và lưu trữ trong một tệp


31

Tôi cần ghi lại mọi tổ hợp phím và lưu trữ trong một tệp trong thư mục người dùng ~, khi sử dụng tài khoản của mình, tôi không phải là sudoer và tôi không thể cài đặt các chương trình (như logKeys ) theo bất kỳ cách nào. Làm thế nào tôi có thể làm như vậy bằng cách sử dụng thiết bị đầu cuối?

LƯU Ý: Câu hỏi này không phải là một bản sao của câu hỏi đề cập khác; trong câu hỏi này tôi đang hỏi về mọi tổ hợp phím, trong khi ở câu hỏi khác, người hỏi đã hỏi về tổ hợp phím trong phiên cuối.


Bạn có nghĩa là bất kỳ ký tự / byte phím nào đến từ một thiết bị đầu cuối cụ thể, hoặc bất kỳ phím bấm / nhả phím nào ngay cả từ bất kỳ bàn phím nào được kết nối với máy tính chủ?
Stéphane Chazelas

Mỗi kryboard được kết nối
Mitro

2
@etherfish nó không phải là một bản sao bởi vì, tôi không có nghĩa là chỉ trong phiên cuối, nhưng mọi tổ hợp phím, cũng như trong máy tính để bàn, khi không có chương trình nào đang chạy.
Mitro

1
Trong phiên GUI (X11)? Hoặc trên bảng điều khiển Linux? Thiết bị đầu cuối phải làm gì với điều này, vì bạn không chỉ muốn ghi lại những gì bạn đã nhập trong thiết bị đầu cuối?
Gilles 'SO- ngừng trở thành ác quỷ'

1
@AlessioMTX Bạn đã đúng. Lỗi của tôi.
etherfish

Câu trả lời:


47

xinput testcó thể báo cáo tất cả các sự kiện bàn phím đến máy chủ X. Trên hệ thống GNU:

xinput list |
  grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
  xargs -P0 -n1 xinput test

Nếu bạn muốn lấy tên khóa từ mã khóa, bạn có thể xử lý hậu kỳ đầu ra đó bằng:

awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
     {print $0 "[" k[$NF] "]"}'

Thêm vào > file.logđể lưu trữ trong một tệp nhật ký. Hoặc | tee file.logđể cả hai đăng nhập và xem nó.

xinputtruy vấn XinputExtension của máy chủ X. Điều đó gần giống như bạn sẽ đạt được như một tiêu chuẩn (tôi không biết về bất kỳ tiêu chuẩn nào bao gồm các tiện ích X) hoặc lệnh chung để thực hiện điều đó. Điều đó cũng không yêu cầu quyền root.

Nếu máy chủ X và xinput hỗ trợ phiên bản 2 của XinputExtension, bạn có thể sử dụng test-xi2thay vì testcung cấp thêm thông tin, đặc biệt là trạng thái của các công cụ sửa đổi (shift, ctrl, alt ...). Thí dụ:

$ xinput test-xi2 --root
EVENT type 2 (KeyPress)
    device: 11 (11)
    detail: 54
    flags:
    root: 846.80/451.83
    event: 846.80/451.83
    buttons:
    modifiers: locked 0 latched 0 base 0x4 effective: 0x4
    group: locked 0 latched 0 base 0 effective: 0
    valuators:
    windows: root 0x26c event 0x26c child 0x10006e6

Bạn có thể dịch mã khóa (in detail) sang keyym với sự trợ giúp của xmodmap -pkemột lần nữa và effectivebitmask sửa đổi thành thứ gì đó hữu ích hơn với sự trợ giúp của xmodmap -pm. Ví dụ:

xinput test-xi2 --root | perl -lne '
  BEGIN{$"=",";
    open X, "-|", "xmodmap -pke";
    while (<X>) {$k{$1}=$2 if /^keycode\s+(\d+) = (\w+)/}
    open X, "-|", "xmodmap -pm"; <X>;<X>;
    while (<X>) {if (/^(\w+)\s+(\w*)/){($k=$2)=~s/_[LR]$//;$m[$i++]=$k||$1}}
    close X;
  }
  if (/^EVENT type.*\((.*)\)/) {$e = $1}
  elsif (/detail: (\d+)/) {$d=$1}
  elsif (/modifiers:.*effective: (.*)/) {
    $m=$1;
    if ($e =~ /^Key/){
      my @mods;
      for (0..$#m) {push @mods, $m[$_] if (hex($m) & (1<<$_))}
      print "$e $d [$k{$d}] $m [@mods]"
    }
  }'

sẽ xuất ra:

KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]

khi tôi nhấn Shift + Alt + q khi bật num-lock.

Lưu ý rằng bạn không cần phải có đặc quyền siêu người dùng để cài đặt chương trình. Nếu bạn có quyền ghi vào một nơi nào đó trên hệ thống tệp được cấp quyền thực thi (thư mục chính của bạn /tmp, /var/tmp...) thì bạn có thể sao chép một xinputlệnh từ một hệ thống tương thích ở đó và thực thi nó.


Nó là rất tốt, đầu ra là phím nhấn phím n1 nhấn phím n2 phát hành .. Có cách nào để hiển thị chữ cái instad của số? Và làm thế nào để lưu trữ trong một tập tin "nhật ký"? PS: không may là PC của tôi không cài đặt chương trình này theo mặc định và tôi không thể cài đặt bất cứ thứ gì vào lúc này, tôi đã thử trên một PC khác.
Mitro

Ngoài ra, số lượng không thể nhận ra nếu tôi đang sử dụng 2 hoặc "
Mitro

2
@AlessioMTX, tất cả các lần nhấn phím sẽ được ghi lại mặc dù bao gồm cả phím Shift và phím Capslock. Xem thêm chỉnh sửa của tôi cho nhãn / biểu tượng chính thay vì mã phím.
Stéphane Chazelas

1
@AlessioMTX, bạn sẽ cần xinput 1.6.1hoặc mới hơn cho --root. Các tiện ích X có thể được tải xuống riêng lẻ từ xorg.freedesktop.org/release/inderson/app . Nếu bạn không muốn biên dịch từ nguồn. Debian có xinput 1.6.1 cho một số kiến ​​trúc dành cho Linux hoặc kfreebsd.
Stéphane Chazelas

1
@AlessioMTX, điều đó có nghĩa là cho các sự kiện đến máy chủ X. xmodmapđã tham gia triển khai X tham khảo từ năm 1987 ít nhất. Chúng ta đang nói về hệ thống nào? Có thể đó xmodmapkhông phải là của bạn $PATH( /usr/dt/binhoặc khác?).
Stéphane Chazelas

3

Bạn đã cân nhắc sử dụng scriptlệnh chưa?


Nó không phải là những gì tôi đang tìm kiếm. Tôi đọc từ liên kết nhưng nó chỉ dành cho phiên cuối.
Mitro
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.