RE: [CBLX] Comment éteindre la machine par programme

[ Thread Index | Date Index | More lists.tuxfamily.org/carrefourblinux Archives ]


Bonjour Didier,

Merci infiniment pour cette réponse rapide. Avant d'implémenter ça sur mon Raspberry, j'ai voulu tester une simplification sur mon PC. Cette simplification a deux objectifs: s'affranchir des boîtes de dialogue que je ne pourrai de toute façon pas afficher vu que la seule *vraie* interface avec la machine sera finalement une page web, et n'implémenter que la fonction qui sert à l'éteindre.

Donc, pour tester ça, j'ai ouvert une session python interactive sur mon PC et j'ai entré ces commandes une à une, (enfin, pas tout à fait parce que j'avais wm-logout ouvert dans mon éditeur et je copiais-collais dans mon terminal).

Toutes les commandes suivantes ont bien marché:

>>> import dbus
>>> ConsoleKitService = 'org.freedesktop.ConsoleKit'
>>> ConsoleKitPath = '/org/freedesktop/ConsoleKit/Manager'
>>> ConsoleKitInterface = 'org.freedesktop.ConsoleKit.Manager'
>>> system_bus = dbus.SystemBus()

Mais la commande suivante a planté:

>>> consolekit = dbus.Interface(system_bus.get_object(ConsoleKitService, ConsoleKitPath), ConsoleKitInterface)

Le message d'erreur est le suivant:

DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.ConsoleKit was not provided by any .service files

Je t'épargnes le traceback.

Il doit me manquer quelque chose sur mon PC mais qu'est-ce que c'est?

Merci infiniment. Bonne soirée. @+ ChD

-----Original Message-----
From: Didier Spaier <didier@xxxxxxxx> 
Sent: Tuesday, July 24, 2018 10:14 AM
To: carrefourblinux@xxxxxxxxxxxxxxxxxxx
Subject: Re: [CBLX] Comment éteindre la machine par programme

** WARNING: This mail is from an external source **


On 07/24/2018 09:24 AM, Delaunay Christophe wrote:
> Bonjour tous,

Bonjour Christophe et les autres,

> Sur la page web, j'ai su mettre des boutons start et stop pour démarrer et arrêter notre app maison. Maintenant, on me demande un bouton pour éteindre complètement le petit système de façon à ce que les utilisateurs ne soient pas tentés de débrancher le câble d'alimentation sauvagement.
>
> Le problème, c'est que pour faire ça, je ne connais que des commandes qu'il faut passer en sudo. Pourtant, quand j'éteins mon PC linux en partant le soir, depuis l'environnement graphique, je n'ai besoin d'aucun mot de passe alors je me doute bien qu'il doit y avoir un moyen d'éteindre une machine linux sans avoir à passer en mode root. D'où ma question :
> Quelle est la différence entre une commande du style « sudo poweroff » et l'icône « éteindre » qu'on clique dans l'environnement graphique ? Quelles instructions dois-je mettre dans mon petit serveur web pour qu'il sache éteindre complètement une machine sans avoir recours au mot de passe d'un sudoer SVP ?

La différence c'est que quand tu clique sur une de ces icônes cela exécute une commande qui fait appel à un système de vérification d'autorisation basé sur dbus et Consolekit, donc cela nécessite d'installer un peu de plomberie au-delà d'un système "minimum".
Pour info je joins dans une archive compressée un script Pyton wm-logout utilisé pour fournir ces fonctions dans Slint dans le cas où on utilise juste un gestionnaire de fenêtres et pas un bureau complet. Ce n'est pas moi qui l'ai écrit, donc ça fonctionne ;)

> Aujourd'hui, mon serveur est développé en Python mais en fait, peu m'importe le langage dans lequel il faudra programmer ces instructions. Je trouverai forcément un moyen de les faire exécuter, fussent-elles en assembleur. Oops non, pas l'assembleur parce que je développe sur un PC mais la cible est un processeur ARM mais en C, ou autre, ça va le faire tant que ce langage sera un cran au-dessus de l'assembleur. Une commande toute faite qu'on pourrait taper à la console le ferait aussi, du moment qu'elle ne demande pas de mot de passe.

Une autre solution, plus expéditive, est de supprimer le mot de passe de root. Mais bon, pour un serveur web avec toutes les fenêtre grande ouvertes sur un monde hostile...

Didier

--
   CBLX - CarrefourBLinuX MailingListe
   Pour obtenir de l'aide, envoyez le sujet  help  à:
   carrefourblinux-request@xxxxxxxxxxxxxxxxxxx
   Archives:
   http://listengine.tuxfamily.org/lists.tuxfamily.org/carrefourblinux
   ou
   http://www.mail-archive.com/carrefourblinux@xxxxxxxxxxxxxxxxxxx/


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/