소개
모든 GUI 동작 을 기록 할 수는 없지만 열린 창에 해당하는 기록 명령과 같은 작업을 수행 할 수 있습니다. 아래는 작업을 수행하는 간단한 파이썬 스크립트입니다. 아직 개발 중이지만 필요한 작업의 90 %를 수행합니다.
소스 코드
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk,Gtk
import time
import os
import subprocess
def run_cmd(cmdlist):
""" Reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError:
pass
else:
if stdout:
return stdout
def print_info(stack,event):
base_xprop = ['xprop','-notype']
for xid in stack:
pid = None
check_pid = run_cmd(base_xprop + [ '_NET_WM_PID', '-id',str(xid)])
if check_pid:
pid = check_pid.decode().split('=')[1].strip()
with open('/proc/'+pid+'/cmdline') as fd:
command = fd.read()
print(time.strftime("%D %H:%M:%S" + " "*3) + event + pid + " " + command)
def main():
sc = Gdk.Screen.get_default()
old_stack = None
while True:
stack = [ win.get_xid() for win in sc.get_window_stack() ]
if old_stack:
# Difference between current and old stack will show new programs
diff = set(stack) - set(old_stack)
if diff:
print_info(diff," 'New window open' ")
else:
print_info(stack," 'Script Started' ")
old_stack = stack
time.sleep(2)
if __name__ == '__main__': main()
시운전 :
$ ./log_open_windows.py
01/25/17 15:33:13 'Script Started' 2915 nautilus-n
01/25/17 15:33:13 'Script Started' 3408 /opt/google/chrome/chrome
01/25/17 15:33:13 'Script Started' 12540 /usr/bin/python/usr/bin/x-terminal-emulator
01/25/17 15:33:13 'Script Started' 2454 compiz
01/25/17 15:33:13 'Script Started' 2454 compiz
01/25/17 15:33:13 'Script Started' 2454 compiz
01/25/17 15:33:13 'Script Started' 2454 compiz
01/25/17 15:33:13 'Script Started' 2454 compiz
01/25/17 15:33:21 'New window open' 15143 /usr/lib/firefox/firefox-new-window
01/25/17 15:33:27 'New window open' 15196 unity-control-center
스크립트는 타임 스탬프, 이벤트 유형, 창 PID 및 해당 명령을 보여줍니다.
사용하는 방법
모든 스크립트의 표준 규칙이 적용됩니다. 스크립트를 ~/bin
디렉토리에 저장하십시오 . ~/bin
directory 가 없으면 하나 만드십시오. 거기에 스크립트 파일을 저장하고로 실행 가능한지 확인하십시오 chmod +x ~/bin/log_open_windows.py
. 원하는 경우 언제든지 명령 줄을 호출 ~/log_open_windows.py
하여 명령 줄에서 실행할 수 있습니다 .