J'ai des problèmes parce que mes amis avec qui j'habite oublient souvent d'éteindre notre ordinateur. Je ne sais pas comment utiliser la solution pour la faire semblant. Le système Ubuntu est installé.
Je cherche une solution qui obligera l'utilisateur à cliquer et à confirmer (une fois par heure) que quelqu'un utilise un ordinateur. S'il ne le fait pas, l'ordinateur devrait automatiquement s'arrêter.
Existe-t-il une solution à ce problème?
Voilà un script de travail de ce que vous voulez faire:
#!/bin/bash
while true; do
sleep 59m
zenity --question --text "Are you using the pc (click anything)?"&
zenity_id=$!
#the user has 1 minute to answer, otherwise PC will shut down
sleep 1m
if kill $zenity_id 2> /dev/null; then
#zenity was still running, shutdown the pc
dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
fi
done
Toutes les heures, il affiche une fenêtre contextuelle demandant `` Êtes-vous toujours là? '', Si l'utilisateur clique sur quelque chose, il ne s'éteint pas pendant encore une heure (dans une heure, la fenêtre contextuelle s'affiche à nouveau), mais si plus d'une minute s'écoule sans interaction avec la boîte de dialogue, le PC s'arrête automatiquement. Afin de démarrer cela au démarrage, créez un fichier avec le code ci-dessus et rendez-le exécutable (clic droit-> propriétés-> autorisations-> autoriser l'exécution du fichier en tant que programme) et cliquez sur le bouton d'alimentation en haut à droite de votre écran, sélectionnez les applications de démarrage et ajoutez ce script.
Une façon de procéder consiste à émuler une pression sur le bouton d'alimentation. La boîte de dialogue suivante apparaîtra et arrêtera l'ordinateur après 60 secondes.
Pour ce faire, utilisez acpi_fakekey 116
qui "appuiera" sur le bouton d'arrêt (numéro 116). (Au moins 116 est mon bouton d'arrêt. S'il échoue sur votre machine, essayez d'installer evtest
et exécutez-le pendant que vous appuyez sur le bouton)
Pour automatiser cela toutes les heures, ajoutez-le à root crontab comme ceci:
Sudo crontab -e
et ajoutez la ligne suivante:
0 * * * * /usr/bin/acpi_fakekey 116
Cela va appuyer sur le bouton à la 0e minute de chaque heure de chaque jour de chaque semaine de chaque mois.
Il semble fastidieux de faire cliquer sur un bouton à chaque intervalle spécifié.
Vous pouvez laisser gnome-screensaver fonctionner pour vous et vérifier combien de temps il fonctionne.
Dans un script, vous pouvez faire quelque chose comme ceci:
#!/bin/bash
pidof X || exit #not running X!
export DISPLAY=":0" # use current display
DURATION="`gnome-screensaver-command -t | awk '{print $7}'`"
if [ $DURATION -gt 3600 ]; then #idle for an hour
shutdown -h now
fi
Ceci est un exemple TRÈS basique que n'importe qui pourrait développer. Placez-le dans une tâche cron ou exécutez-le en mode démon avec des appels while/sleep.
Je ne l'utiliserais pas exactement tel quel, mais juste pour illustrer une méthode. Cela fait l'hypothèse que nous utilisons gnome-screensaver. xscreensaver a des appels similaires.
Vous pourriez écrire un script simple en utilisant la commande shutdown 0
après une invite.
Je dois ajouter que vous pouvez utiliser la commande sleep dans une boucle pour réaliser l'attente.