启动时运行 shell 脚本(Xubuntu 20.04)

启动时运行 shell 脚本(Xubuntu 20.04)

我正在尝试找到一种方法来在 Xubuntu 登录后自动启动 shell 脚本。
我检查了许多其他问题和答案,但仍然没有找到解决办法。

这是我正在尝试运行的脚本:

#!/bin/sh

SH_PATH="`dirname \"$0\"`"
xkbcomp ${SH_PATH}/keyboardmap $DISPLAY

这是一个基于Linux CapsLock 延迟修复程序修改大写锁定键,使其行为与 Windows 平台上的行为相同,以便可以在快速打字时使用它来大写。

我尝试创建一个条目Session and Startup -> Application Autostart

会话和启动

以下是我尝试过的方法:

/home/yooks/Scripts/fix_capslock.sh
sh /home/yooks/Scripts/fix_capslock.sh
sh -c "sh /home/yooks/Scripts/fix_capslock.sh"
sh -c "/home/yooks/Scripts/fix_capslock.sh"

当我从终端在任何路径上运行该脚本时,它都能很好地执行。
让我每次登录 Xubuntu 时运行此脚本的最简单方法是什么?

答案1

$DISPLAY 的设置取决于您使用的 DM(显示管理器)。由于您的脚本在登录时实际上是在没有 shell 的情况下运行的,因此没有设置 $DISPLAY。为了解决这个问题,您可能需要#!/bin/sh在脚本中的行下方添加以下几行:

#Get Display Manger
DM=$(/usr/bin/basename $(/bin/cat /etc/X11/default-display-manager))

#Set Display based on DM and login type
case $DM in
    lightdm)
        export DISPLAY=:0;;
    gdm3)
        grep -E "#  AutomaticLogin|AutomaticLoginEnable = false" /etc/$DM/*.conf >/dev/null && export DISPLAY=:1 || export DISPLAY=:0;;
    *);;
esac
        

通过测试,我发现当我使用 LightDM 登录系统时,:0无论是否自动登录,显示都会一直显示。但是使用 GDM3 时,如果您设置了自动登录,则显示会:0一直显示;如果您没有设置自动登录,则显示会一直显示:1。我运行一个脚本,该脚本会在特定时间自动启动 Firefox,并将其添加到设置 $DISPLAY 中,这样 Firefox 就可以从脚本启动,而无需当时在终端中运行。

希望这可以帮助!

相关内容