Page 1 sur 2

[openbox] Menu d'extinction graphique

Publié : mar. 12 janv. 2010, 11:31
par veka
Bonjour a tous,

Je vais vous présenter un petit script python ( pas de moi ) qui me permet d'avoir le menu d'extinction ci-dessous :

Image

0) Requis : python

1) Télécharger le script : Script-quitter.zip

2) Editer le fichier "ob_logout" :

Code : Tout sélectionner

## Lien vers le fond d'ecran
IMG_FILE = '/home/veka/.FOND/bg.jpg' 

## Commande pour se deconnecter
CMD_LOGOUT = 'openbox --exit'

## Commande pour reboot
CMD_REBOOT = 'sudo shutdown -r now'

## Commande pour etteindre l'ordinateur
CMD_SHUTDOWN = 'sudo shutdown -h now'
3) Accorder les droit d'utiliser les commande d'extinction sans etre Root. Pour cela, éditez le fichier /etc/sudoers grace à la commande visudo et ajouter ceci : ( Se fichier doit etre édité en ROOT )

Code : Tout sélectionner

%users  ALL=NOPASSWD: /sbin/shutdown
ASTUCE : ( OPTIONNEL )

Pour ne pas avoir a changer manuellement le lien vers le fond d'ecran a chaque modification de se dernier, jutilise une méthode qui change le fond d'ecran du bureau et le celui du script en même temps.

0) Requis : feh ( pour gerer le fond d'ecran )

1) Creer un dossier caché qui contiendra le fond d'ecran, dans cette exemple le dossier ".FOND" :

2) Inserer un fond d'ecran dans se dossier.

3 ) Editer le fichier ob_logout" pour ciblé le nouveau fond d'ecran.

4) Et enfin, utiliser la commande suivante pour changer le fond d'ecran :

Code : Tout sélectionner

/bin/cp "/....../....../fond_ecran_que _l'on_veux.jpg" "/....../....../.FOND/fond_ecran.jpg"   &&  feh --bg-scale '/....../....../.FOND/fond_ecran.jpg' 
Il est possible d'utiliser cette commande dans une action personnaliser ( clic droit ) avec Thunar, Nautilus, ...

4' ) Pour ceux qui n'utiliser pas feh comme gestionnaire de fond d'ecran n'oublier pas d'ajouter cette commande au démarrage de la session :

Code : Tout sélectionner

#Fond ecran 
				 feh --bg-scale '/....../....../.FOND/fond_ecran.jpg'   & 
Attention:
Cette methode ne permet que des fond d'ecran avec la même extension ( jpg, png, ... ).
Il est toutefois possible de faire un petit script qui peut arranger cela.


PS :
Si vous trouvez une erreur dans mes expliquation n'esitez pas a me le signaler.
Désoler pour l'orthographe.

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mar. 12 janv. 2010, 13:41
par desmogone
Salut !

Juste pour compléter et sauf erreur de ma part, pour éditer le fichier /etc/sudoers, il faut faire (sous root effectivement)

Code : Tout sélectionner

visudo
.
Cette commande permet de contrôler l'intégrité du fichier et de détecter les erreurs éventuelles.

Sinon, je vais tester ce petit script @home après avoir fait certaines modifications (Déjà, j'utilise Nitrogen au lieu de Feh) ...

Desmogone, qui précise et qui dit merci.

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mar. 12 janv. 2010, 13:55
par gyo
desmogone a écrit :Juste pour compléter et sauf erreur de ma part, pour éditer le fichier /etc/sudoers, il faut faire (sous root effectivement)

Code : Tout sélectionner

visudo
.
Cette commande permet de contrôler l'intégrité du fichier et de détecter les erreurs éventuelles.
Oui, c'est tout à fait ça et d'ailleurs c'est hautement recommandé car on a vite fait de faire des erreurs et ça peut entraver la sécurité du système.
D'ailleurs visudo n'utilise pas forcément vi comme éditeur, il va regarder si la variable EDITOR est alimentée.

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mar. 12 janv. 2010, 14:02
par veka
précision de l'utilisation de visudo corigé.

Merci.

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mar. 12 janv. 2010, 15:47
par joedu12
Moi j'ai fait ma propre version a moi en faisant un mélange de celui à ADcomp et celui de veka :

Code : Tout sélectionner

#!/usr/bin/env python2.5

##
#   Script to Exit , logout , reboot , suspend  [ gdm / openbox ]
#
#   http://crunchbanglinux.org/forums/topic/295/updated-openboxlogout-script/
##

import gtk
import os
import pwd
from PIL import Image, ImageFilter

class MyApp():
    def __init__(self):

        self.window = gtk.Window()
        self.window.set_title("Log Out ..")
        self.window.connect("destroy", self.doquit)
        self.window.connect("key-press-event", self.onkeypress)
        self.window.set_decorated(False)

        self.mainpanel = gtk.Fixed()
        self.window.add(self.mainpanel)

        self.screen_x , self.screen_y = gtk.gdk.screen_width(), gtk.gdk.screen_height()

        x = ( self.screen_x / 2 ) - ( 140 * 4 / 2 ) - 30
        y = ( self.screen_y / 2 ) - 100

        ## 1st Line
        self.add_bouton("application-exit",x+30,y+30)
        self.add_bouton("system-log-out",x+170,y+30)
        self.add_bouton("system-restart",x+310,y+30)
        self.add_bouton("system-shutdown",x+450,y+30)
        
        self.add_label("Retour",x+75, y+170)
        self.add_label("Deconnexion",x+196, y+170)
        self.add_label("Redemarrage",x+333, y+170)
        self.add_label("Extinction",x+486, y+170)


        self.set_background()

    def set_background(self):
        img_file = "/tmp/root_window.jpg"
        w = gtk.gdk.get_default_root_window()
        sz = w.get_size()
        pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
        pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
        if (pb != None):
            pb.save(img_file,"jpeg")
            image = Image.open(img_file)
            color = 'black'
            alpha = 0.5
            mask = Image.new("RGB", image.size, color)
            image = Image.blend(image, mask, alpha)
            image.save(img_file,"jpeg")

        pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(img_file, self.screen_x, self.screen_y)
        pixmap, mask = pixbuf.render_pixmap_and_mask()
        # width, height = pixmap.get_size()
        self.window.set_app_paintable(True)
        self.window.resize(self.screen_x, self.screen_y)
        self.window.realize()
        self.window.window.set_back_pixmap(pixmap, False)
        self.window.move(0,0)
        del pixbuf
        del pixmap



    def add_bouton(self, name, x, y):
        image = gtk.Image()
        image.set_from_file("img/" + name + ".png")
        image.show()
        # un bouton pour contenir le widget image
        bouton = gtk.Button()
        bouton.set_relief(gtk.RELIEF_NONE)
        bouton.set_focus_on_click(False)
        bouton.set_border_width(0)
        bouton.set_property('can-focus', False)
        bouton.add(image)
        bouton.show()
        self.mainpanel.put(bouton, x,y)
        bouton.connect("clicked", self.clic_bouton, name)

    def add_label(self, name, x, y):
        label = gtk.Label(name)
        label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("white"))
        self.mainpanel.put(label, x, y)

    # Cette fonction est invoquee quand on clique sur un bouton.
    def clic_bouton(self, widget, data=None):

        if (data=='application-exit'):
            self.doquit()

        elif (data=='system-log-out'):
            os.system('openbox --exit')

        elif (data=='system-restart'):
            os.system('sudo shutdown -r now')

        elif (data=='system-shutdown'):
            os.system('sudo shutdown -h now')


    def onkeypress(self, widget=None, event=None, data=None):
        if event.keyval == gtk.keysyms.Escape:
            self.doquit()

    def doquit(self, widget=None, data=None):
        gtk.main_quit()

    def run(self):
        self.window.show_all()
        gtk.main()

#-------------------------
if __name__ == "__main__":
#-------------------------
    ## need to change directory
    SRC_PATH = os.path.dirname( os.path.realpath( __file__ ) )
    os.chdir(SRC_PATH)
    app = MyApp()
    app.run()
PS : J'ai les même fichiers que veka dans le répertoire img :wink:


Édit : voila un petit screen shoot :
Image

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mer. 10 févr. 2010, 03:04
par banditblue
joedu12 a écrit :Moi j'ai fait ma propre version a moi en faisant un mélange de celui à ADcomp et celui de veka :

Code : Tout sélectionner

#!/usr/bin/env python2.5

##
#   Script to Exit , logout , reboot , suspend  [ gdm / openbox ]
#
#   http://crunchbanglinux.org/forums/topic/295/updated-openboxlogout-script/
##

import gtk
import os
import pwd
from PIL import Image, ImageFilter

class MyApp():
    def __init__(self):

        self.window = gtk.Window()
        self.window.set_title("Log Out ..")
        self.window.connect("destroy", self.doquit)
        self.window.connect("key-press-event", self.onkeypress)
        self.window.set_decorated(False)

        self.mainpanel = gtk.Fixed()
        self.window.add(self.mainpanel)

        self.screen_x , self.screen_y = gtk.gdk.screen_width(), gtk.gdk.screen_height()

        x = ( self.screen_x / 2 ) - ( 140 * 4 / 2 ) - 30
        y = ( self.screen_y / 2 ) - 100

        ## 1st Line
        self.add_bouton("application-exit",x+30,y+30)
        self.add_bouton("system-log-out",x+170,y+30)
        self.add_bouton("system-restart",x+310,y+30)
        self.add_bouton("system-shutdown",x+450,y+30)
        
        self.add_label("Retour",x+75, y+170)
        self.add_label("Deconnexion",x+196, y+170)
        self.add_label("Redemarrage",x+333, y+170)
        self.add_label("Extinction",x+486, y+170)


        self.set_background()

    def set_background(self):
        img_file = "/tmp/root_window.jpg"
        w = gtk.gdk.get_default_root_window()
        sz = w.get_size()
        pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
        pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
        if (pb != None):
            pb.save(img_file,"jpeg")
            image = Image.open(img_file)
            color = 'black'
            alpha = 0.5
            mask = Image.new("RGB", image.size, color)
            image = Image.blend(image, mask, alpha)
            image.save(img_file,"jpeg")

        pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(img_file, self.screen_x, self.screen_y)
        pixmap, mask = pixbuf.render_pixmap_and_mask()
        # width, height = pixmap.get_size()
        self.window.set_app_paintable(True)
        self.window.resize(self.screen_x, self.screen_y)
        self.window.realize()
        self.window.window.set_back_pixmap(pixmap, False)
        self.window.move(0,0)
        del pixbuf
        del pixmap



    def add_bouton(self, name, x, y):
        image = gtk.Image()
        image.set_from_file("img/" + name + ".png")
        image.show()
        # un bouton pour contenir le widget image
        bouton = gtk.Button()
        bouton.set_relief(gtk.RELIEF_NONE)
        bouton.set_focus_on_click(False)
        bouton.set_border_width(0)
        bouton.set_property('can-focus', False)
        bouton.add(image)
        bouton.show()
        self.mainpanel.put(bouton, x,y)
        bouton.connect("clicked", self.clic_bouton, name)

    def add_label(self, name, x, y):
        label = gtk.Label(name)
        label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("white"))
        self.mainpanel.put(label, x, y)

    # Cette fonction est invoquee quand on clique sur un bouton.
    def clic_bouton(self, widget, data=None):

        if (data=='application-exit'):
            self.doquit()

        elif (data=='system-log-out'):
            os.system('openbox --exit')

        elif (data=='system-restart'):
            os.system('sudo shutdown -r now')

        elif (data=='system-shutdown'):
            os.system('sudo shutdown -h now')


    def onkeypress(self, widget=None, event=None, data=None):
        if event.keyval == gtk.keysyms.Escape:
            self.doquit()

    def doquit(self, widget=None, data=None):
        gtk.main_quit()

    def run(self):
        self.window.show_all()
        gtk.main()

#-------------------------
if __name__ == "__main__":
#-------------------------
    ## need to change directory
    SRC_PATH = os.path.dirname( os.path.realpath( __file__ ) )
    os.chdir(SRC_PATH)
    app = MyApp()
    app.run()
PS : J'ai les même fichiers que veka dans le répertoire img :wink:


Édit : voila un petit screen shoot :
Image
mais vous mettez ou le fichier ob-logout je suppose dans /home??

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mer. 10 févr. 2010, 10:33
par joedu12
Ben n'importe ou du moment que tu a les droits sur le fichier. Moi par exemple j'ai créé un dossier .pygtkexit dans mon home avec mon fichier .py et les images :wink:

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mer. 10 févr. 2010, 14:29
par banditblue
ca me parait farfelue

d'un coté j'ai le script je l'ai éditer et changer le racourci de mon image puis mis dans /home
ensuite c'est la que je sais pas quoi faire

quand je clic dans mon menu openbox j'ai toujours ce cadre
" Etes vous certain de vouloir quitter openbox? "

alors que vous vous avez ce superbe logout

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mer. 10 févr. 2010, 15:22
par veka
je me demande si tu utilise mal le script.
essai de le lancer simplement en double cliquant dessus ou en le lancant via un terminal.
tu dit :
quand je clic dans mon menu openbox j'ai toujours ce cadre
" Etes vous certain de vouloir quitter openbox? "
Je ne comprend pas de quoi tu parle. parle tu d'un menu d'extinction qui etait deja présent ? Si oui, le script n'a rien avoir avec cela, il s'agit d'un autre systeme d'extinction.

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : ven. 12 févr. 2010, 13:11
par cavolo
salut, il me semble que c'est un type qui s'appelle ad-comp, il m'avait donner un lien sur ubuntu-fr ^^, par contre j'avais pas réussit a mettre toute les commande, notamment a cause de sudo me semble :D )

c'est quand même vachement beau je trouve, en plus c'est entièrement configurable ^^

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : mer. 17 févr. 2010, 23:27
par banditblue
Si quelqu'un pouvais en faire un Wiki

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : ven. 05 mars 2010, 15:12
par Kiljaeden
Ce script a l'air sympa mais il ne fonctionnait pas chez moi au départ :
Je le lance via le terminal :

Code : Tout sélectionner

python ./py_logout/ob_logout
Et python me renvoyait :

Code : Tout sélectionner

File ".pylogout/ob_logout", line 12, in <module>
    from PIL import Image, ImageFilter
ImportError: No module named PIL
Du coup, j'ai installé python-imaging et ça marche. Il faudrait préciser ça si une page de wiki est créée. (EDIT: je commence à créer une page openbox-logout )

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : ven. 05 mars 2010, 16:21
par hatdn
le même avec modification http://pastebin.archlinux.fr/378944

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : ven. 05 mars 2010, 18:21
par Kiljaeden
Tu as une screen STP ?

J'ai légèrement modifié le script si on utilise Nitrogen : ça va chercher dans le fichier de config de nitrogen (~/.config/nitrogen/bg-saved.cfg) quel est le fond d'écran courant et ça l'utilise comme image de fond. C'est un peu fait à la barbare parce que je maîtrise pas totalement python, mais ça marche. :lol:
A la place de ça :

Code : Tout sélectionner

## Lien vers le fond d'ecran
IMG_FILE = '/home/veka/.FOND/bg.jpg'

## Commande pour se deconnecter
CMD_LOGOUT = 'openbox --exit'

## Commande pour reboot
CMD_REBOOT = 'sudo shutdown -r now'

## Commande pour etteindre l'ordinateur
On met ça :

Code : Tout sélectionner

## Lien vers le fond d'ecran
wpp = os.popen('grep file= .config/nitrogen/bg-saved.cfg|cut -c 6-')
chemin_wpp = wpp.read()
wpp.close()
image = chemin_wpp[:-1]
IMG_FILE = image

## Commande pour se deconnecter
CMD_LOGOUT = 'openbox --exit'

## Commande pour reboot
CMD_REBOOT = 'sudo shutdown -r now'

## Commande pour etteindre l'ordinateur
J'ai jamais utilisé feh, mais il doit y avoir moyen de faire pareil je suppose. :wink:

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : sam. 23 oct. 2010, 23:30
par banditblue
je viend de changer mon disque dur qui était hs
j'ai tout réinstallé dans les régles de l'art
j'ai un petit souci avec le fond d'écran d'extinction

auparavant j'arrivais à installé ce script qui est fort sympa sur mon eepc

voila ce que je fait

je télécharge le fichier script-quitter sur ce lien http://wiki.archlinux.fr/openbox-logout ... []=logout
je le dézip et dans mon /home/moi ce qui me crée un dossier Script-quitter je prend le dossier img et le fichier ob_logout que je copie dans ce répertoire .openbox-logout-py

pour etre sur de pouvoir compiler pacman -S pygtk python gtk gtk2 python2 (en root)
toujours sous root je renseigne /etc/sudoers ==> %users ALL=NOPASSWD: /sbin/shutdown
je me reconnecte en mode user
je copie le fichier de joe12 qui ce trouve dans le wiki cité plus haut et le renomme en openbox_logout-py que je met également dans .openbox-logout-py
dans ob_logout je renseigne l'image de fond /home/moi/wallpaper/1.jpg

sous user
/home/moi/.openbox-logout-py ==> chmod +x ob_logout pour le rendre executable
et pout finaliser ==> python .openbox-logout-py/ob_logout


voila ce que j'ai comme erreur dans mon terminal Xterm


[moi@Eeepc100HA ~]$ python .openbox-logout-py/ob_logout
Traceback (most recent call last):
File ".openbox-logout-py/ob_logout", line 3, in <module>
import gtk, os
ImportError: No module named gtk
[moi@Eeepc100HA ~]$

qu'est ce que j'ai oublier de faire?

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : dim. 24 oct. 2010, 01:03
par benjarobin

Code : Tout sélectionner

python2 .openbox-logout-py/ob_logout
Ne marche pas mieux ?

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : dim. 24 oct. 2010, 01:04
par veka
il faut remplacer :

Code : Tout sélectionner

#!/usr/bin/python
par

Code : Tout sélectionner

#!/usr/bin/python2
suite a la mise a jour de python.

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : dim. 24 oct. 2010, 13:58
par wido
Voici le mien:

Code : Tout sélectionner

#!/usr/bin/env python3
# -*- coding:utf8 -*-
#=================
# Dependance:
# python, tk, dbus, openbox

from tkinter import *
import os
import subprocess

# Logout
def logout():
    pid1 = subprocess.Popen("openbox --exit", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).pid
    fen1.destroy()
    print('résultat:', pid1)
# Reboot
def reboot():
    pid2 = subprocess.Popen('dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Reboot', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).pid
    print('résultat:', pid2)
    fen1.destroy()

# Shutdown
def shutdown():
    pid3 = subprocess.Popen('dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).pid
    print('résultat:', pid3)
    fen1.destroy()

    
fen1 = Tk()
fen1.title("Openbox")
fen1.maxsize(width=300, height=60)
fen1.minsize(width=150, height=30)
fen1.resizable(width=YES, height=NO)
bou1 = Button(fen1, text='Eteindre', command=shutdown)
bou1.pack(side=LEFT)
bou2 = Button(fen1, text='Redémarrer', command=reboot)
bou2.pack(side=LEFT)
bou3 = Button(fen1, text='Logout', command=logout)
bou3.pack(side=LEFT)
bou4 = Button(fen1, text='Annuler', command=fen1.quit)
bou4.pack(side=LEFT)
fen1.mainloop()
fen1.destroy()

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : dim. 24 oct. 2010, 20:11
par banditblue
merci veka, j'avais zappé cette astuce

parcontre quand je lance ob_logout j'ai ce petit probléme

le bouton annuler fonctionne
le bouton extinction fonctionne lui aussi

mais les boutons redémarrage et extinction ne fonctionne pas

j'ai bien renseigner /etc/sudoers édité en root avec nano ( je ne connais pas vi)

Code : Tout sélectionner

%users ALL=NOPASSWD: /sbin/shutdown
est ce que j'ai oublié quelque chose ?

Re: [Openbox-ASTUCE] Menu d'extinction graphique

Publié : dim. 24 oct. 2010, 20:48
par veka
banditblue, d'aprés moi il n'y a pas de problème mais je ne suis pas un expert avec les regle de sudo.

La seul chose que je puisse faire c'est te montrer mes reglage dans l'espoir que cela puisse t'aider :

/etc/sudoers

Code : Tout sélectionner

# Privilège ROOT
root    ALL=(ALL) ALL

# Exception a sudo
%users  ALL=NOPASSWD: /etc/rc.d/wicd
%users  ALL=NOPASSWD: /sbin/shutdown
%users  ALL=NOPASSWD: /usr/bin/pacman