运行需要 xserver 会话的启动脚本

运行需要 xserver 会话的启动脚本

我有一个 python3 脚本,它使用Gtk-module(从 导入gi.repository,用于最近管理器功能),需要链接到当前 xserver 会话(lightdmUbuntu 中的服务)。

通过控制台(在 xserver 会话中)手动运行它可以工作,但我希望它自动运行。

init.d 脚本无法运行(将 DISPLAY 变量设置为 0.0)。使用xvfb-run使 init.d 脚本运行我的脚本,但按预期在虚拟 xserver 环境中运行(不是我的)。有没有等效的,将 init.d 脚本连接到当前 xserver 会话?

到目前为止,我已经尝试了一个.xinitrc文件(在 中~/,是的,它是可执行的),以及创建了.xprofile, .xsession, .xsessionrc所有通过 链接到第一个的文件ln -s。我尝试添加gnome-terminal &进行测试,但终端也没有出现,无论是重新启动lightdm还是整个 PC 并再次登录后。

我也尝试过在 X 会话恢复时运行配置脚本,但这会导致错误Can't open /usr/share/acpi-support/power-funcs

upstart按照建议使用使用 lightdm 运行启动脚本也不会提供 xserver 显示变量(或句柄?),只是在lightdm启动后运行它,对吗?

也许把它放在某处xorg.conf?(我如何才能使 xrandr 定制永久化?) 打败我..

(我的脚本制作了最近文件的快速列表并将它们添加到 Unity 启动器的右键菜单中,类似于窗口:https://github.com/thirschbuechler/ubuntu-recentquicklists

答案1

正如在许多情况下一样,时机是这里的主要问题。

  1. 您的脚本需要在用户级别运行登录后,因为它编辑启动器项,这是用户级别的。
  2. 即便如此,看看脚本应该做什么(阅读您的解释),脚本需要等待一段时间才能完全加载桌面;登录后,Unity Launcher 并不是第一个“准备就绪”的东西。如果脚本运行得太早,它就会中断或错过目标。

简而言之

您需要在登录后约 10-15 秒运行该脚本,可以通过添加以下任一方式完成:

/bin/bash -c "sleep 15 && python /path/to/script.py"

(如果脚本不可执行)或

/bin/bash -c "sleep 15 && /path/to/script.py"

(如果脚本可执行文件)添加到用户的启动应用程序:Dash > 启动应用程序 > 添加。

运行它全部用户

如果你需要运行脚本对于所有用户(登录后),您可以一次将其添加到所有用户的启动应用程序中。

为此,将下面的代码复制到一个空文件中,编辑行,从下面开始Name=并在行中设置脚本的正确路径:

Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"

然后将文件保存/etc/xdg/autostartlaunch_script.desktop(或任何你喜欢的格式,只要以 结尾.desktop

[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application

相关内容