10 gui command-line
例如,我通常从应用程序菜单打开鼠标垫(xfce 相当于 gedit)。但是,我知道您也可以通过在终端中输入mousepad
.
按照这个例子,我想要的是每当我通过 GUI 打开鼠标垫时,在日志文件中写入一个新行,说明类似Sep 5 15:35:11 lucho@lucho:~$ mousepad
. 更一般地说,我想要的是记录所有可能通过命令行执行的 GUI 活动(如打开程序、更改权限、修改系统设置等),但以其替代命令行执行格式编写。我希望这样做是为了提高我对如何使用命令行的知识(无需浏览man
页面)。我通过 GUI 做了很多事情,而我不通过命令行(有些可能通过脚本或键盘快捷键自动执行),拥有这个日志文件将是学习它们的好方法。
我知道 syslog 文件的存在,/var/log
但这不是我需要的。据我所知,来自 Ubuntu 存储库的活动日志管理器应用程序不显示命令行格式。我需要类似 .bash_history 文件的东西,它存在于我的主文件夹中,但记录了我基于 GUI 的活动。
虽然不可能记录所有GUI 操作,但可以完成诸如记录与打开的窗口相对应的命令之类的操作。下面是完成这项工作的简单 python 脚本。它仍在开发中,但已完成 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()
Run Code Online (Sandbox Code Playgroud)
$ ./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
Run Code Online (Sandbox Code Playgroud)
该脚本显示时间戳、事件类型、窗口 PID 和相应的命令。
任何脚本的标准规则都适用。确保将脚本存储在~/bin
目录中。如果您没有~/bin
目录,请创建一个。将脚本文件保存在那里并确保它可以使用chmod +x ~/bin/log_open_windows.py
. 之后,您可以随时通过调用命令行来从命令行运行它~/log_open_windows.py
。
归档时间: |
|
查看次数: |
1979 次 |
最近记录: |