我来到这里,试图启动多个大胆的实例。
只允许一个实例实际上更难实现,因为程序需要找到已经运行的实例并与之通信。这是通过 D-Bus 完成的。为了防止与已经启动的实例通信,您可以在另一个 D-Bus 会话中运行该程序:
nohup dbus-run-session 大胆 &
nohup dbus-run-session 大胆 &
注意:即使终端关闭,nohup 也会保持程序运行。
此方法也适用于不允许用户在多个实例与一个实例之间进行选择的其他程序。
请注意,如果多个实例访问相同的配置文件,这可能会引入错误。
使用 xfce 4.14.1 和 dbus 1.12.20 测试
对于 Scite:
scite -check.if.already.open=false &
请注意:
如果你和我一样,让你的系统运行了多个月,并且编辑了一些快捷方式或别名以使用这个 hack 打开,那么一段时间后,一些程序将不再启动,因为已经有太多打开的 D-巴士会议。在这种情况下,您必须终止已启动的 D-Bus 会话,这些会话不会在已启动的程序关闭时关闭。反过来,杀死 D-Bus 会话也会杀死打开的程序,所以要小心使用!就我个人而言,我有一些长时间运行的自动启动程序,我想保持打开状态(firefox),所以除了前 10 个 D-Bus 会话之外,我用这个杀死了所有的会话:
for pid in $( ps --sort start_time -aux | grep dbus-daemon | tail +10 | awk '{ print $2; }' ); do kill $pid; done
最干净的解决方案是编写一个启动器脚本,等待程序完成,然后关闭打开的 D-Bus 会话。但这比看起来要困难一些,因为很难找到相应 D-Bus 会话的 PID。
P.S.:我也使用了这个 hack,因为我的系统上似乎有一些程序,一段时间后,它会减慢系统的默认文件打开对话框,甚至需要几分钟才能打开!然后,程序在尝试保存或打开文件时似乎挂起。出于某种原因,新的 D-Bus 会话似乎可以解决此问题。在写这篇文章时,我发现pkill gvfsd-trash 也可以工作,它可能是this 错误。所以在它发货之前,我想我会在我的 crontab 中添加 pkill gvfsd-trash。