Mint linut: Skript herunterfahren, wobei Zenity nicht funktioniert

446
petwho

Ich habe ein einfaches Skript geschrieben, das ausgeführt wird, wenn ich meinen Computer herunterfahre. Ich habe das Skript unter /etc/init.d/Verzeichnis abgelegt und es mit verlinkt /etc/rc0.d/. Der Link ist Softlink und der Name lautet K99checkout-reminder.

Hier ist das Ergebnis der Auflistung von Dateien unter /etc/rc0.d/:

lrwxrwxrwx 1 root root 24 Nov 17 18:10 K99checkout-reminder -> ../init.d/alert_checkout

Hier ist der Inhalt von 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 

Ich habe versucht, das Skript unter rootPrivilegien auszuführen, und es funktioniert gut:

$ /etc/rc0.d $ sudo ./K99checkout-reminder 

Es wurde eine Benachrichtigungsbox angezeigt!

Gibt es etwas, was ich hier vermisse?

Vielen Dank.

0

4 Antworten auf die Frage

0
AskTrae

Versuchen Sie, den Besitzer zu ändern, wenn es funktioniert, dann ist es eine Berechtigungssache. Berechtigungen können schwierig sein, auch wenn sie manchmal vollen Zugriff haben.

Vielen Dank für Ihre Antwort, aber es funktioniert nicht. petwho vor 9 Jahren 0
0
cj ayho

Versuchen Sie, ein Symbol vor den Zeilenenden im Zenity-Text hinzuzufügen:

#!/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 

oder ersetzen Sie neue Zeilensymbole durch \ n Escapezeichen.

0
Jozef

Bitte beachten Sie, dass es einen Unterschied gibt, ob Sie unter root-Berechtigungen und unter dem rootBenutzer laufen . Wenn Sie versucht haben, es so auszuführen:

sudo ./alert_checkout

Dann funktionierte es, da die Real UID noch auf Ihren Benutzer eingestellt war und nur die Effective UID in root geändert wurde. Wenn Sie jedoch als init.dSkript ausgeführt werden, wird es unter dem Root-Benutzer ausgeführt, sodass beide UIDs auf Root gesetzt sind .

Dies ist verwirrend, zenityda die Nachricht in Ihrer Benutzersitzung angezeigt werden muss. Daher benötigt es die Real-ID, um zu Ihrem Benutzer zu passen.

Wenn Sie dies nur für ein bestimmtes Benutzerkonto benötigen, bearbeiten Sie einfach das Skript und führen Sie zenity unter aus su <user> -c <zenity cmd>.

0
AngelaS

Ich denke, der Link, den Sie anzeigen, ist ein symbolischer oder symbolischer Link.

Wenn das System heruntergefahren wird, denke ich, dass es die Kill inits in numerischer Reihenfolge ausführt

K01 ... wird vor K02 ausgeführt ...

Wenn Sie dieses Skript als K99 ausführen ...

Dann wäre der Fenstermanager nicht bereits heruntergefahren?

Haben Sie versucht, Ihr Skript so auszuführen:

K01checkout-reminder