我有一个 python3 脚本,它使用Gtk
-module(从 导入gi.repository
,用于最近管理器功能),需要链接到当前 xserver 会话(lightdm
Ubuntu 中的服务)。
通过控制台(在 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
正如在许多情况下一样,时机是这里的主要问题。
- 您的脚本需要在用户级别运行登录后,因为它编辑启动器项,这是用户级别的。
- 即便如此,看看脚本应该做什么(阅读您的解释),脚本需要等待一段时间才能完全加载桌面;登录后,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/autostart
为launch_script.desktop
(或任何你喜欢的格式,只要以 结尾.desktop
)
[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application