我找到了这个KDE Open最近关闭的应用程序问题,这正是我想要做的,但是我在 ubuntu 上。该问题的唯一答案是启动器的“最近使用”部分,但最近使用的列表不包括锁定到启动器的应用程序。
通常情况下,我通过终端运行大多数程序,但浏览器之类的程序我会从启动器运行。有时我会不小心关闭它们。
简而言之:我希望大多数浏览器都具有将“ctrl-shift-t”选项卡功能应用于 ubuntu 中的程序。
如果它以脚本的形式出现,那就很好了;我确实没有太多编写 bash 脚本的经验,因此如果能提供解释或文档链接就更好了。
磁盘上是否有存储最近关闭的程序列表?我知道可能是日志,但我想弄清楚如何解析会很麻烦?我想我希望某个地方有一个不错的小日志文件,可以记录关闭/打开的应用程序以及运行/启动它们的程序的路径。另外:如果我想让 ubuntu 创建这样的日志文件,我该怎么做?
答案1
正如评论中所要求的,这是一个概念性的答案,没有可立即使用的脚本。
概念解释;如何记录最近关闭的应用程序
介绍
从进程和 pid 列表中,很难确定哪个属于应用程序或另一个进程。不过,既然您提到了 GUI 应用程序,我们可以记录视窗,它为我们提供了判断最近关闭的申请所需的所有信息。
使用 wmctrl 列出正在运行的 GUI 应用程序
控制端(默认情况下不存在于您的系统中)是一个命令行工具,可以为您提供有关当前现有窗口的信息。命令:
wmctrl -lp
生成一个窗口列表,如下所示:
---
0x02c0000c 0 23772 jacob-System-Product-Name Hud
0x02e0000a -1 23877 jacob-System-Product-Name Desktop
0x0480001d 0 28367 jacob-System-Product-Name Ask Ubuntu General Room | chat.stackexchange.com - Mozilla Firefox
0x05200007 0 26724 jacob-System-Product-Name System Monitor
0x05800084 0 27183 jacob-System-Product-Name *Untitled Document 1 - gedit
---
在列表的第二列中,你可以看到当前打开的窗口的 pid,例如:23877
,28367
从这些 pid 中,我们可以使用以下命令检索拥有该窗口的进程(应用程序):
ps -o cmd= <pid>
例如:
$ ps -o cmd= 27183
gedit
然后,我们需要做的就是运行一个周期为几秒钟的循环,将拥有窗口(=应用程序)的进程(唯一)列表与几秒钟前的列表进行比较。如果某个进程“离开”了列表,则该进程是最近关闭的窗口。简而言之:
(概念)循环概述(python 风格)
applications1 = get_applications()
while True:
time.sleep(3)
applications2 = get_applications()
closed = [app for app in applications1 if not app in applications2]
if closed:
most_recent = closed[0]
# store the process in a file, to be available to run as most recently closed
open(f, "wt").write(most_recent)
application1 = application2
其中 f 是最新应用程序写入的文件的路径。随后让另一个进程/命令启动文件中的应用程序,设置就完成了。
语言?
毫无疑问,几乎所有脚本语言都可以做到这一点。对我来说,python 似乎是轻松生成此类脚本的最佳语言……
笔记
请注意,上面的原理图代码仅用于示例,没有测试过的代码!