GNU/Linux >> Belajar Linux >  >> Linux

Rekam Setiap Keystroke Dan Simpan Dalam File?

Saya perlu merekam setiap penekanan tombol dan menyimpan dalam file di direktori pengguna ~, saat menggunakan akun saya, saya bukan sudoer dan saya tidak dapat menginstal program (seperti logKeys) dengan cara apa pun. Bagaimana saya bisa melakukannya menggunakan terminal?

CATATAN: Pertanyaan ini bukan duplikat dari pertanyaan penyebutan lainnya; dalam pertanyaan ini saya menanyakan tentang setiap penekanan tombol, sementara di pertanyaan lain penanya menanyakan tentang penekanan tombol di sesi terminal.

Jawaban yang Diterima:

xinput test dapat melaporkan semua kejadian keyboard ke server X. Pada sistem GNU:

xinput list |
  grep -Po 'id=Kd+(?=.*slaves*keyboard)' |
  xargs -P0 -n1 xinput test

Jika Anda ingin mendapatkan nama kunci dari kode kunci, Anda dapat mem-post-proses output tersebut dengan:

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

Tambahkan > file.log untuk disimpan dalam file log. Atau | tee file.log untuk login dan melihatnya.

xinput menanyakan XinputExtension dari server X. Itu sedekat yang akan Anda dapatkan sebagai standar (saya tidak mengetahui standar apa pun yang mencakup utilitas X) atau perintah umum untuk melakukan itu. Itu juga tidak memerlukan hak akses root.

Jika server X dan xinput mendukung versi 2 dari XinputExtension, Anda dapat menggunakan test-xi2 bukannya test yang memberikan lebih banyak informasi, khususnya status pengubah (shift, ctrl, alt…). Contoh:

$ 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

Anda dapat menerjemahkan kode kunci (dalam detail ) ke keysym dengan bantuan xmodmap -pke lagi, dan effective pengubah bitmask menjadi sesuatu yang lebih bermanfaat dengan bantuan xmodmap -pm . Misalnya:

xinput test-xi2 --root | perl -lne '
  BEGIN{$"=",";
    open X, "-|", "xmodmap -pke";
    while (<X>) {$k{$1}=$2 if /^keycodes+(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]"
    }
  }'

akan menghasilkan:

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

saat saya menekan Shift+Alt+q saat num-lock aktif.

Perhatikan bahwa Anda tidak perlu memiliki hak pengguna super untuk memasang sebuah program. Jika Anda memiliki akses tulis ke suatu tempat di sistem file tempat izin eksekusi diberikan (direktori home Anda, /tmp , /var/tmp …) maka Anda dapat menyalin xinput perintah dari sistem yang kompatibel di sana dan jalankan.

Terkait:Ssh – Bagaimana cara mempercepat login ssh yang terlalu lambat?
Linux
  1. `^m` Dan Bagaimana Cara Menghilangkannya?

  2. Bagaimana Cara Glob Setiap File Tersembunyi Kecuali Direktori Saat Ini Dan Induk?

  3. Symlink Cepat Dan Lambat?

  1. Mengapa Ls -l Tidak Menunjukkan Waktu Dan Atau Tahun Untuk Setiap File??

  2. Menginstal dan mengonfigurasi vsFTPD

  3. GZip setiap file secara terpisah

  1. Utas dan deskriptor file

  2. unix - kepala DAN ekor file

  3. Simpan keluaran tanggal dan perintah tonton ke file