Ho installato e configurato OpenBox su Debian minimale nel mio Mac Book Pro 13" [8.1] del 2011, e non apprezzando molto il menù di uscita di default, ho pensato di scriverne uno personale . Il nome deriva dalla combinazione delle prime due lettere di ciascuno dei comandi principali in lingua inglese dello script: SH-utdown, RE-boot e LO-gout.
Lo script è realizzato in Python 3 e Tkinter 3.8. All'avvio presenta una finestra in cui sono disposti orizzontalmente i pulsanti per la gestione della chiusura di OpenBox come illustrato nell'immagine seguente:
Lo script è contenuto in una cartella nominata 'Shrelo', all'interno della quale si trova il programma vero e proprio, 'Shrelo.py' e una directory di nome 'Immagini' in cui sono memorizzati i disegni che compongono i pulsanti dell'applicazione. Vi si trova pure una cartella nominata 'Icone' che raccoglie i temi a disposizione per cambiare l'aspetto di 'Shrelo'. A tale riguardo, per modificare l'estetica dei pulsanti è sufficiente copiare il contenuto di una delle cartelle in 'Icone' e sovrascrivere i disegni che sono presenti nella cartella 'Immagini'. A titolo generale, per modificare il tema di 'Shrelo' è sufficiente utilizzare qualunque disegno di pulsanti purché i nomi siano gli stessi dei tasti originali e in formato '.PNG'.
Ecco i temi:
2D Black
2D Color
3D Color
3D Sfumato
3D Tondo
Per funzionare correttamente è necessario cambiare i permessi per l'utente nel file di configurazione 'sudoers' usando l'utility seguente:
$ sudo visudo [sudo] password di gandalfrank:
Qualora un messaggio vi comunichi che il file non è stato trovato scrivete questa istruzione:
$ sudo /usr/sbin/visudo [sudo] password di gandalfrank:
Appare l'editor 'Nano' con il file '/etc/sudoers.tmp' pronto per essere modificato. Bisogna aggiungere alla fine del file la seguente linea:
gandalfrank ALL=(ALL) NOPASSWD:ALL
il cui scopo è quello di comunicare al sistema che l'utente 'gandalfrank' può utilizzare l'istruzione 'sudo' senza inserire la password. Ovviamente al posto del mio nickname utente dovete inserire il vostro.
Per avviare il programma digitare la seguente istruzione nel terminale o come comando in un lanciatore:
python3 ~/Shrelo/Shrelo.py
Di seguito il codice sorgente dello script e il link per il download.
# 09/07/2023 Fiaschi Francesco # shrelo è un nome dervato dalle prime due lettere # dei tre comandi: Sh-utdown, Re-boot e Lo-gout # versione OOP import tkinter as tk import os import subprocess class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master=master self.master.resizable(width=False, height=False) self.master.overrideredirect(True) self.pack() self.create_widgets() def Shutdown(self): subprocess.run(["systemctl", "poweroff"]) def Restart(self): subprocess.run(["systemctl", "reboot"]) def Suspend(self): subprocess.run(["systemctl", "suspend"]) def Hibernate(self): subprocess.run(["systemctl", "hibernate"]) def Logout(self): subprocess.run(["openbox", "--exit"]) def Cancel(self): self.master.destroy() def create_widgets(self): self.btn_Shutdown=tk.Button(root, text="", image=img_shutdown, command=self.Shutdown) self.btn_Shutdown.pack(side=tk.LEFT) self.btn_Restart=tk.Button(root, text="", image=img_restart, command=self.Restart) self.btn_Restart.pack(side=tk.LEFT) self.btn_Suspend=tk.Button(root, text="", image=img_suspend, command=self.Suspend) self.btn_Suspend.pack(side=tk.LEFT) self.btn_hibernate=tk.Button(root, text="", image=img_hibernate, command=self.Hibernate) self.btn_hibernate.pack(side=tk.LEFT) self.btn_logout=tk.Button(root, text="", image=img_logout, command=self.Logout) self.btn_logout.pack(side=tk.LEFT) self.btn_Cancel=tk.Button(root, text="", image=img_cancel, command=self.Cancel ) self.btn_Cancel.pack(side=tk.LEFT) root=tk.Tk() img_shutdown = tk.PhotoImage(file = "~/Shrelo/Immagini/shutdown.png") img_restart = tk.PhotoImage(file = "~/Shrelo/Immagini/restart.png") img_suspend = tk.PhotoImage(file = "~/Shrelo/Immagini/suspend.png") img_hibernate = tk.PhotoImage(file = "~/Shrelo/Immagini/hibernate.png") img_logout = tk.PhotoImage(file = "~/Shrelo/Immagini/logout.png") img_cancel = tk.PhotoImage(file = "~/Shrelo/Immagini/cancel.png") app=Application(master=root) root.update() # dimensioni schermo l=root.winfo_screenwidth() h=root.winfo_screenheight() # dimensioni finestra lf=root.winfo_width() hf=root.winfo_height() # coordinate punto di disegno finestra x=int((l-lf)/2) y=int((h-hf)/2) root.geometry('{}x{}+{}+{}'.format(lf, hf, x, y)) app.mainloop()