모든 키 입력을 기록 하고 사용자 디렉토리의 파일에 저장 해야합니다 ~ 계정을 사용할 때 sudoer가 아니며 어떤 방식으로도 프로그램 ( logKeys 등 )을 설치할 수 없습니다 . 터미널을 사용하여 어떻게 그렇게 할 수 있습니까?
참고 : 이 질문은 다른 언급 질문과 중복되지 않습니다. 이 질문에서 나는 모든 키 입력에 대해 묻고 있지만 다른 질문에서는 터미널 세션에서 키 입력에 대해 물었습니다.
모든 키 입력을 기록 하고 사용자 디렉토리의 파일에 저장 해야합니다 ~ 계정을 사용할 때 sudoer가 아니며 어떤 방식으로도 프로그램 ( logKeys 등 )을 설치할 수 없습니다 . 터미널을 사용하여 어떻게 그렇게 할 수 있습니까?
참고 : 이 질문은 다른 언급 질문과 중복되지 않습니다. 이 질문에서 나는 모든 키 입력에 대해 묻고 있지만 다른 질문에서는 터미널 세션에서 키 입력에 대해 물었습니다.
답변:
xinput test
모든 키보드 이벤트를 X 서버에보고 할 수 있습니다. GNU 시스템에서 :
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
키 코드에서 키 이름을 얻으려면 다음을 사용하여 해당 출력을 사후 처리 할 수 있습니다.
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
> file.log
로그 파일에 저장하기 위해 추가 하십시오. 또는 | tee file.log
두 가지 모두 기록하고 볼 수 있습니다.
xinput
X 서버의 XinputExtension을 쿼리합니다. 그것은 표준 (X 유틸리티를 다루는 표준을 알지 못함) 또는 일반적인 명령으로 얻을 수있는 한 가깝습니다. 또한 루트 권한이 필요하지 않습니다.
X 서버 및 xinput이 XinputExtension 버전 2를 지원하는 경우, test-xi2
대신 test
수정 자 상태 (shift, ctrl, alt ...)에 대한 자세한 정보를 제공 하는 대신 사용할 수 있습니다 . 예:
$ 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
키 코드 (in detail
)를 xmodmap -pke
다시 사용하여 keysym로 변환하고 effective
수정 자 비트 마스크를 사용하여보다 유용한 것으로 변환 할 수 xmodmap -pm
있습니다. 예를 들어 :
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]"
}
}'
출력 :
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
num-lock이 켜져있을 때 Shift + Alt + q를 누르면
프로그램 을 설치 하기 위해 수퍼 유저 권한이 필요하지 않습니다 . 실행 권한이 부여 된 파일 시스템의 어딘가 (홈 디렉토리 /tmp
, /var/tmp
...) 에 대한 쓰기 액세스 권한이 xinput
있으면 호환 가능한 시스템에서 명령을 복사하여 실행할 수 있습니다.
xinput
1.6.1
대한 최신 정보 가 필요 합니다 --root
. X 유틸리티는 xorg.freedesktop.org/releases/individual/app 에서 개별적으로 다운로드 할 수 있습니다 . 소스에서 컴파일하지 않으려는 경우. 데비안은 리눅스 나 kfreebsd를위한 여러 아키텍처를위한 xinput 1.6.1 을 가지고 있습니다.
xmodmap
적어도 1987 년부터 참조 X 구현에있었습니다. 우리는 여기서 어떤 시스템을 이야기하고 있습니까? 그것이 xmodmap
당신의 $PATH
( /usr/dt/bin
또는 다른?)에 있지 않을 수 있습니까?