Her tuş vuruşunu kaydedin ve bir dosyaya kaydedin


31

Her tuşa basıp kaydetmem ve kullanıcı dizininde bir dosyada saklamam gerekiyor ~, hesabımı kullanırken sudo değilim ve programları ( logKey'ler gibi ) hiçbir şekilde yükleyemiyorum . Terminal kullanarak bunu nasıl yapabilirim?

NOT: Bu soru, söz konusu sorunun bir kopyası değildir; Bu soruda her tuşa basış hakkında soru soruyorum, diğerinde ise terminal terminal oturumunda tuş basışını sordu.


Belirli bir terminal aygıtından gelen herhangi bir anahtar karakter / bayt veya ana bilgisayara bağlı herhangi bir klavyeden bile herhangi bir tuşa basılması / bırakılması mı?
Stéphane Chazelas 13:14

Her bağlı kryboard
Mitro

2
@etherfish bu bir kopya değil çünkü sadece terminal oturumunda değil, program çalıştığında her tuş vuruşunda, masaüstünde de.
Mitro

1
Bir GUI (X11) oturumunda mı? Veya bir Linux konsolunda? Bir terminalin bununla ne alakası var, çünkü sadece bir terminalde yazdıklarınızın kaydını istemediğinizden mi?
Gilles 'SO- kötülük'

1
@AlessioMTX Haklısın. Benim hatam.
eter

Yanıtlar:


47

xinput testTüm klavye olaylarını X sunucusuna bildirebilir. Bir GNU sisteminde:

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

Anahtar kodlardan anahtar isimleri almak istiyorsanız, bu çıktıyı aşağıdakilerle işlemden geçirebilirsiniz:

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

> file.logBir günlük dosyasında depolamak için ekleyin . Veya | tee file.logher iki kütüğe ve görmek için.

xinputX sunucusunun XinputExtension'ı sorgular. Bu, bir standart (X yardımcı programlarını kapsayan herhangi bir standardın farkında değilim) veya ortak bir komut alacağınız kadar yakındır. Bu aynı zamanda kök ayrıcalıkları gerektirmez.

X sunucusu ve xinput, XinputExtension'ın 2. sürümünü destekliyorsa, test-xi2bunun yerine testdaha fazla bilgi veren, özellikle değiştiricilerin durumu (shift, ctrl, alt ...) kullanabilirsiniz. Örnek:

$ 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

Tuş kodunu (in detail) xmodmap -pketekrar yardımı ile bir tuş takımına , effectivedeğiştirici bit maskesini de yardımı ile daha yararlı bir şeye çevirebilirsiniz xmodmap -pm. Örneğin:

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]"
    }
  }'

çıktı:

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

num-lock açıkken Shift + Alt + q tuşlarına bastığımda.

Bir program yüklemek için süper kullanıcı ayrıcalıklarına sahip olmanız gerekmediğini unutmayın . Dosya sisteminde, yürütme izninin verildiği bir yere yazma erişiminiz varsa (giriş dizininiz /tmp,, /var/tmp...) , xinputoradaki uyumlu bir sistemden bir komut kopyalayıp yürütebilirsiniz.


Çok iyi, çıktı tuşa bas n1 tuşa bas n2 tuşa basış .. Numara harfini göstermek için bir yol var mı? Ve bir dosyada "log" nasıl saklanır? PS: maalesef bilgisayarımda bu program varsayılan olarak yüklü değil ve şu anda hiçbir şey yükleyemiyorum, başka bir bilgisayarda denedim.
Mitro

Üstelik, eğer 2'yi kullanıp kullanmadığımı, ya da "
Mitro,

2
@AlessioMTX, Shift ve Capslock olanlar da dahil olmak üzere tüm tuşlara basılacaktır. Ayrıca, anahtar kodlar yerine anahtar etiketler / semboller için düzenlememe bakın.
Stéphane Chazelas

1
@AlessioMTX, ihtiyacınız olacak xinput 1.6.1veya daha yenisi için --root. X yardımcı programları ayrı ayrı xorg.freedesktop.org/releases/individual/app adresinden indirilebilir . Kaynağından derlemek istemiyorsanız. Debian bir sahiptir Xinput 1.6.1 Linux veya kfreebsd için çeşitli mimarileri için.
Stéphane Chazelas

1
@AlessioMTX, X sunucusundaki olaylar içindir. xmodmapEn azından 1987'den beri referans X uygulamasında olmuştur. Burada hangi sistemden bahsediyoruz? O olabilir xmodmapsizin değil $PATH( /usr/dt/binya da diğer?).
Stéphane Chazelas

3

scriptKomutu kullanmayı düşündünüz mü ?


Aradığım şey bu değil. Bağlantıdan okudum ama bu sadece terminal oturumu için.
Mitro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.