我写了一个简单的脚本,在关闭计算机时运行。我将脚本放在/etc/init.d/
目录下并将其链接回/etc/rc0.d/
。该链接是软链接,其名称为K99checkout-reminder
。
以下是列出文件的结果/etc/rc0.d/
:
lrwxrwxrwx 1 root root 24 Nov 17 18:10 K99checkout-reminder -> ../init.d/alert_checkout
以下是 的内容alert_checkout
:
#!/bin/bash
export DISPLAY=:0.0
if zenity --question --text="I guess you have a nice working day?"; then
zenity --info --text="Gr8! Now please
_______
|
|
|
v
DO NOT forget to CHECKOUT your working time at door.\n\nSee you next day!"
else
zenity --info --text="Thats really sad.\n\nGo checkout your time to finish your working.\n\nHave good dinner, go sleep early and have a nice day!"
fi
我尝试在root
特权下运行该脚本并且运行良好:
$ /etc/rc0.d $ sudo ./K99checkout-reminder
出现了一个警告框!
这里我遗漏了什么吗?
谢谢。
答案1
尝试更改所有者,如果成功的话,那么这是一个权限问题。有时即使授予完全访问权限,权限也可能很棘手。
答案2
尝试在 zenity 文本的行尾前添加 \ 符号,如下所示:
#!/bin/bash
export DISPLAY=:0.0
if zenity --question --text="I guess you have a nice working day?"; then
zenity --info --text="Gr8! Now please \
_______\
\
|\
|\
|\
v\
\
DO NOT forget to CHECKOUT your working time at door.\n\nSee you next day!";
else
zenity --info --text="Thats really sad.\n\nGo checkout your time to finish your working.\n\nHave good dinner, go sleep early and have a nice day!"
fi
或者用 \n 转义符替换新行符号。
答案3
请注意以 root 权限运行和root
在用户下运行。如果您尝试像这样运行它:
sudo ./alert_checkout
然后它就成功了,因为真实 UID仍设置为您的用户,只有有效 UID被更改为 root。但是,当作为init.d
脚本运行时,它将被执行在 root 用户下,因此两个 UID 都设置为根。
这很令人困惑,zenity
因为它需要在您的用户会话中显示消息。因此它需要真实 ID 来匹配您的用户。
如果您只需要此功能适用于特定用户帐户,则只需编辑脚本并在 下运行 zenity su <user> -c <zenity cmd>
。
答案4
我认为您显示的链接是符号链接或符号链接。
当系统关闭时,我认为它会按数字顺序运行 Kill inits,以便
K01... 在 k02... 之前运行
如果您以 K99 身份运行此脚本...
那么窗口管理器不是已经被关闭了吗?
您是否尝试过以如下方式运行脚本:
K01checkout-reminder