Mint linut:使用 zenity 的关机脚本不起作用

Mint linut:使用 zenity 的关机脚本不起作用

我写了一个简单的脚本,在关闭计算机时运行。我将脚本放在/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 

相关内容