如何自动启动到特定桌面

如何自动启动到特定桌面

我尝试使用脚本

#!/bin/sh
### BEGIN INIT INFO
# Provides:          my Desktop setting
# Default-Start:     1 2 3 5 6
# Default-Stop:      
# Description:       Desktop setting
### END INIT INFO
mkdir /media/500g
mount /dev/sda1 /media/500g
d=0
 checkdisplay()
    {
    if [ -z "$DISPLAY" ]; then 
    echo Display not set
    else
    d=111
fi
        return $d
    }
while [ $d != 111 ]
do
checkdisplay
done
pcmanfm --desktop
echo "pcmanfm desktop should run"

但系统日志显示:

my_basic.service:失败,结果为“超时”。

当我从终端测试它时,代码有效。

答案1

在启动时执行的启动脚本中,DISPLAY永远不会设置该变量。通常,X 显示管理器(gdmsddmxdm其他*dm)或startx命令将启动 X 服务器并设置 GUI 会话,并且只有这些进程及其子进程才会DISPLAY设置该变量。

当启动一个新进程时,其父进程将为其提供一组环境变量(如DISPLAY)。通常它只是祖父进程提供给父进程的一组环境变量的副本,但如果有必要,父进程可以在传递变量之前对其进行修改。进程启动后,父进程将无法再以任何方式更改子进程的环境变量:子进程和父进程都将拥有自己的一组完全相互独立的环境变量。

因此你的checkdisplay()测试没有意义:如果DISPLAY在启动脚本时没有设置变量,那么在脚本运行时它将不会被设置,除非你的脚本故意改变它。

在我看来,您的脚本不应作为系统启动脚本放置,而应作为 X11 会话启动脚本放置。如果您使用的是 Ubuntu/Debian,如果您希望此脚本为所有用户运行,那么这里可能是正确的地方;如果您希望它仅为某个特定用户运行,那么这将取决于您使用的桌面环境或窗口管理器:如果您的桌面符合相对较新的 Freedesktop.org 标准,那么/etc/X11/Xsession.d将脚本放入其中可能是解决方案。~/.config/autostart-scripts

答案2

经过几天的搜索和测试,我找到了最有效的解决方案。问题是启动完成后必须安排桌面 - 在我的情况下是 之后xorg.service

步骤如下:

  1. 我创建了两个文件“my_desktop.service”和“my_desktop”

文件“my_desktop.service”位于/etc/systemd/system并包含代码:

[Unit]
Description=My Desktop
After=xorg.service

[Service]
Type=idle
Restart=on-failure
ExecStart=/usr/local/bin/my_desktop

[Install]
WantedBy=multi-user.target

文件“my_desktop”位于/usr/local/bin/并包含代码:

#!/bin/sh
# Description:       Desktop setting
export DISPLAY=:0.0
pcmanfm --desktop
  1. 我按以下顺序通过终端(逐个)激活了上述服务:
systemctl daemon-reload

systemctl enable my_desktop.service

systemctl start my_desktop.service

...现在我的桌面运行顺畅

所以我的脚本必须用作启动后服务。

相关内容