Init.d / crontab 在系统启动时不执行代码 Ubuntu 20.04 Unix

Init.d / crontab 在系统启动时不执行代码 Ubuntu 20.04 Unix

由于 Unix Ubuntu 不支持自然滚动和点击触摸板点击,我创建了简单的脚本来启用这些选项。由于我厌倦了每次重新启动笔记本电脑时执行它,我想将脚本添加到 init.d 但不知何故它没有执行。请参阅以下代码:

#!/bin/bash
DEV="$(xinput list | grep Touchpad | grep -o '=[0-9][0-9]' | grep -o '[0-9][0-9]')"
TAP="$(xinput --list-props $DEV | grep 'Tapping Enabled (' | grep -o '[0-9][0-9][0-9]')"
SCROLL="$(xinput --list-props $DEV | grep 'Natural Scrolling Enabled (' | grep -o '[0-9][0-9][0-9]')"

xinput set-prop $DEV $TAP 1
xinput set-prop $DEV $SCROLL 1

我已经完成了以下1:

Move file to init.d
Sudo chmod a+x /etc/init.d/touchpad.sh
update-rc.d touchpad.sh defaults

2:

Open cronetab
@reboot /directory/touchpad.sh

两种方法均不起作用,但脚本可以运行:

sudo /etc/init.d/touchpad.sh start

我是否遗漏了什么?

谢谢

答案1

我会检查路径,尤其是 cron 的路径,但我不确定 init.d。您还可以考虑为 systemd 创建服务单元,而不是使用 init.d,因为您使用的 Ubuntu 版本使用它。

对于其中任何一个,您都应该考虑在脚本中设置可执行文件的绝对路径,或者确保系统路径按照您想要的方式设置。如果您不确定可执行文件的位置,您可以which xinput在命令提示符下使用(或任何其他可执行文件),它会告诉您它的位置。在我的 Ubuntu 18.04 系统中,xinput/usr/bin/xinput不包含在标准 cron shell 中。您还可以通过在命令行中键入来找出您的系统路径。通常,路径与您的其他 shell 设置一起echo $PATH设置在文件中的某个位置。~/.bashrc

您也可以在脚本顶部(或在 crontab 文件中)设置该路径。如果您想使用 cron,我建议看这里了解如何设置 cron 的一些选项,特别是路径。本文还介绍了 cron 执行时使用的默认值。

我不太熟悉 init.d,所以我不能谈论这个,但如果你想使用 systemd 在启动时运行你的脚本这是关于如何创建 systemd 执行服务单元的良好资源。

如果你对 systemd 和 init.d 之间的区别感兴趣,你可以看这里

此外,如果上述方法不起作用,请尝试添加一些输出重定向对于您的脚本,它可能正在执行但无法按预期工作。此外,如果您创建 systemd 服务单元,您可以进行输出重定向这边走

答案2

解决方案

因此我进一步挖掘了一下,发现 X Server 似乎是在 GUI 启动后执行的。检查以下链接:https://unix.stackexchange.com/questions/360537/cant-run-application-that-depends-on-x-as-a-systemd-service https://unix.stackexchange.com/questions/42611/how-can-i-run-a-script-that-starts-before-my-login-screen/42621#42621

我曾经cat /etc/X11/default-display-manager获取过我的显示管理器名称并使用 wiki 来设置启动脚本:https://wiki.ubuntu.com/LightDM

剩下要做的就是根据 wiki 页面添加文件session-setup-script=/home/huu/Documents/touchpad.sh/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf

相关内容