在启动时启动应用程序

在启动时启动应用程序

任务:

启动时启动 xfce4-clipman

尝试过:

我在正确的位置创建了一个具有正确权限的 sh 脚本:

martin@martin:/etc/init.d$ ls -l start_clipman.sh 
-rwxrwxr-x 1 root root 26 мар 12 09:05 start_clipman.sh

sh文件的内容:

martin@martin:/etc/init.d$ cat start_clipman.sh 
#!/bin/bash
xfce4-clipman
martin@martin:/etc/init.d$ 

我已经跑了

martin@martin:/etc/init.d$ sudo update-rc.d start_clipman.sh 
defaultsinsserv: warning: script 'K01mount_disk.sh' missing LSB tags and overrides
insserv: warning: script 'K01start_clipman.sh' missing LSB tags and overrides
insserv: warning: script 'start_clipman.sh' missing LSB tags and overrides
insserv: warning: script 'mount_disk.sh' missing LSB tags and overrides

潜在问题:

当我这样做时:

martin@martin:~$ xfce4-clipman

应用程序正在运行,但是 xfce-clipman 占用了终端,它正在执行,它正在运行,但如果我想使用终端输入其他内容,我必须取消它。

martin@martin:~$ xfce4-clipman
^C
martin@martin:~$ 

我该怎么办

答案1

xfce4-clipman 需要访问您的 Xorg 显示器(X11 图形系统) - 不仅因为它确实是一个图形应用程序,还因为它是一个剪贴板管理器,X11 也涵盖了这一点。

主要问题:您的 Xorg 显示器在启动时实际上尚不可用。它已推出登录时,在系统启动完成很久之后。因此,不可能在“启动时”启动 xfce4-clipman – 您真正想要的是在登录时也启动该应用程序。

(Linux 旨在支持多用户,他们可以随时登录和注销 - 每个用户都会获得一个全新的 Xorg 副本,登录屏幕本身也会获得一个。因此,服务不能依赖于 Xorg 是否可用。一点儿也不。

登录时启动应用程序

大多数桌面环境,包括 Xfce,都可以通过*.desktop文件启动“登录”任务(这实际上是各种 Xfce 组件的启动方式)。

它们位于/etc/xdg/autostart/全局服务和~/.config/autostart/个人服务中。创建后,默认情况下会“启用”,但仍可以通过 禁用xfce4-session-settings

事实上,xfce4-clipman 甚至会将其自己的自动启动文件安装到 /etc/xdg/autostart – 该文件名为xfce4-clipman-plugin-autostart.desktop。只要您使用 Xfce4,它就会自动运行(由于该OnlyShowIn=XFCE行)。

但是如果你的系统缺少该文件,或者你想在非 Xfce 桌面环境中使用 xfce4-clipman,那么你可以创建一个新的。自动启动.desktop文件通常如下所示:

[桌面条目]
类型=应用程序
名称=剪贴板管理器
执行=xfce4-clipman
终端=false

手动启动非 CLI 程序

许多桌面环境都有一个“运行”对话框AltF2,可让您运行程序而无需占用终端。

做同样事情的各种方法终端有:

  • (setsid xfce4-clipman 2>/dev/null &)
  • (xfce4-clipman &)
  • nohup xfce4-clipman &
  • xfce4-clipman & disown
  • 等等。

init.d 脚本的其他问题

在系统服务适当的情况下,您应该记住 /etc/init.d 中的文件不仅仅是简单的脚本,它们还会在关机时运行,并且必须接受诸如“stop”或“restart”之类的子命令。当系统调用时/etc/init.d/your_service stop,initscript 需要实际停止服务——不要重新启动它!

您已将问题标记为,那么为什么不省去很多麻烦,*.service改而编写一个原生的 systemd 文件呢?虽然“正确的” init.d 脚本可以填满几个屏幕,但 systemd .services 通常不到十几行。

更重要的是:有几十个服务在不同时间点启动。在后期阶段,可以使用早期阶段没有的一些设施。(例如,网络。)

如果你的启动脚本没有明确说明其顺序要求(“必须在 Y 之前但在 Z 之后运行”),操作系统将在不可预测的阶段与其他所有操作并行运行它。如果你非常幸运的是,它会在正确的时刻运行 - 但大多数时候它运行得太早而无法正常工作。

Before=在本机 systemd 单元文件中,使用和参数指定顺序。 (使用或After=指定依赖项也是一个好主意。)同时,init.d 脚本(使用 SysVinit 和 systemd)使用标记为 的特殊注释块,其中包含 和 等参数。Requires=Wants=### BEGIN INIT INFORequired-Start:Should-Start:

相关内容