我正在使用带有 Gnome3 的 Debian,我想知道是否有一种优雅的方法可以在启动一个程序时启动另一个程序。
我的使用情况如下:我使用 keepass 作为密码管理器,当我启动我最喜欢的 Web 浏览器 (Iceweasel) 时,我不想手动启动它。此外,当我登录时,Iceweasel 会自动启动。
目前,我使用桌面文件在登录时自动启动 Iceweasel 和 Keepass。问题是 Keepass 在 Web 浏览器之前启动,我开始在 Keepass 上输入密码,Iceweasel 启动并占据焦点,所以我必须返回 Keepass 完成输入密码,这并不方便。
所以我的主要询问是:
- Gnome3 是否有一个功能可以启动一个 GUI 程序后自动启动另一个 GUI 程序?
- 如果 Gnome3 没有提供这样的功能,我是否应该创建一个 shell 脚本来实现它。如果可以,我该怎么做?(我熟悉基本的 shell 脚本,但实际上我不知道该怎么做)
- 除了内置的 Gnome3 功能和脚本之外还有其他解决方案吗?
关于我的问题的一些说明:
答案1
第一个问题:不,您不能 100% 确定您的程序将按特定顺序启动(这与 GNOME 无关)。进程排队,每过一段时间,就会选择另一个进程由 CPU 启动,这取决于内核设置(即您的操作系统)。因此,您可以使用 shell 脚本。这不是更好的解决方案,我们将找出原因。
对于 shell 脚本,主要方法是通过在脚本中写入它们的名称来调用 keepass 和 Iceweasel,但这是行不通的
(这个没用,不要用)
#! /bin/bash
Keepass
Iceweasel
(以 # 开头的任何行都将被视为注释。以 #! 开头的行称为 shebang,其唯一目的是指示要使用的 shell,但如果您对 shell 脚本不熟悉,暂时不要理会它)
这不起作用,因为 shell 会等待第一个程序终止后再处理第二行。
因此,您必须向 shell 表明您不想等待一个程序结束后再开始另一个程序。您可以使用以下命令来实现&命令之后例如:
Keepass &
使用此功能只是允许您继续使用您的 shell。
所以你认为你可以做到
#! /bin/bash
Keepass &
Iceweasel
它会起作用,但不会解决你的问题。由于这些程序不太可能以在完全加载时发送信号的方式进行编码,因此我们不得不使用一个肮脏的技巧。我推荐它只是为了你个人的方便,但请记住,在专业级别或系统级别使用它来做任何事情都是非常不好。您将告诉您的计算机在启动其他程序之前只需等待几秒钟。这是通过使用睡觉命令。例如:sleep 10
将使你的脚本等待十秒钟
所以你的脚本应该是这样的
#! /bin/bash
Keepass &
sleep 10
Iceweasel
将 10 调整为一个可以让你有足够的时间输入密码的值,但请记住,使用睡眠进行同步是很坏。
然后您可以告诉您的系统在登录时启动此脚本(如果需要,请不要忘记调整权限)
最后,我建议你使用 Iceweasel 插件,因为它更适合这种情况。Keepass 网站,您可以找到有关 KeeForm 和 KeeFox 的更多信息(以及许多其他插件,但这些似乎适合您的需求)(我没有权限放足够的链接)