5 - Installation Debian - Openbox
Par Freecrazy -
—
Dernière modification
19/10/2016 22:36
Je pars de la version Squeeze de Debian afin de montrer également les mises à jour. Comme environnement de bureau j'installe OpenBox car c'est l'une des plus légères donc parfaite pour les micros anciens. Et l'installation sera complète puisque je partirai de l'installation minimale de Debian (accès console seule !) et j'ajouterai les briques nécessaires au fur à mesure. ATTENTION: Cet article a débuté avec la version Squeeze (6.x) de Debian et s'est terminé fin 2014 avec la version Wheezy (7.x). Je l'ai souvent écrit en différé car la Debian Openbox est vite devenue mon environnement privilégié pour travailler sur mes sites web et mes programmes. Mais de fait en me relisant, je trouve cet article un peu brouillon et c'est peut-être comme tel qu'il faut le considérer. C'est vrai il appartient à la rubrique Test, mais je pense avoir trouvé mon bonheur avec cette Debian-Openbox y/c pour un ordinateur de bureau. Donc prochainement j'ouvrirai une rubrique spécifique Debian, avec la re écriture complète de cet article et ce sur une seule version de Debian.
Le micro est le HP-Compaq 6710b décrit précédemment. Sur l'installation de base je vais aller assez vite, car cela se trouve partout et reste assez aisé (que ce soit en mode graphique ou texte). En voici, les grandes étapes
Voilà, un redémarrage plus tard, je me retrouve devant mon écran en mode texte. 1 - La première chose que je voulais faire était de me connecter en Wi-Fi.
Oui, cela peut sembler curieux, mais je voulais tester cette possibilité d'établir une connexion WiFi purement en ligne de commande. Et c'est plus simple qu'il n'y paraît. Nota 1: Je vais décrire la connexion WiFi cryptée en WPA PSK, ou encore appelée WPA personnel (j'espère que vous avez abandonné depuis longtemps les connexions ouvertes et le cryptage WEP), et avec attribution d'adresse par DHCP (ce que fait aujourd'hui toutes 'box' ou point d'accès). Nota 2: Pour en savoir plus rien de tel que la documentation Debian sur la configuration WiFi. Dans un premier réflexe j'ai voulu installer network-manager car souvent (pour ne pas dire toujours) utilisé dans les distributions Linux que j'ai eu l'occasion de tester. Cependant après lecture de plusieurs post et articles je me suis rendu compte que ce n'est pas la façon la plus simple de démarrer En effet NetworkManager "ne sert qu'à" gérer les connections nomades, et si la connexion sur un nouveau réseau se fait facilement par son applet graphique (nm-applet que pour l'instant je ne peux avoir), c'est plus complexe en ligne de commande. Donc, pour l'instant, le mieux est d'oublier ces gestionnaires de réseau que sont NetworkManager, Wicd, ou autre ifplugd, et de se contenter d'établir "en dur" une liaison WiFi. Comme nous sommes en WPA, nous utiliserons wpa_supplicant qui est le client permettant de traiter les connexions cryptées en WPA, mais ce de manière transparente. En effet le paquet wpasupplicant fournit les options qui vont bien pour lancer une connexion WiFi décrite dans /etc/network/interfaces. Il suffit donc d'ajouter au fichier /etc/network/interfaces:# nano /etc/network/interfaces auto wlan0 # wlan0 est en principe le nom de votre interface wifi (iwconfig), # auto permet le lancement au démarrage iface wlan0 inet dhcp wpa-ssid <nom de votre réseau> # Avec ou sans guillemets wpa-psk <votre mot de passe> # Idem Et pour démarrer votre interface et ainsi lancer wpa-supplicant en tâche de fond: # ifup wlan0 Remarques:
2 - Mise à jourOui avant toute chose, je préfère travailler avec une version à jour. Par contre je vais rester pour l'instant sous Squeeze (6.0), car je veux tester le changement de version avec un système déjà bien 'chargé'. Donc pour la mise à jour, il nous faut définir les dépôts (adresse Internet où sont stockés tous les paquets de la distribution). Si l'application graphique Synaptic est très performante et très facile d'utilisation, elle ne nous est pas accessible pour le moment, donc nous allons procéder en ligne de commande. Avant toute chose, un petit rappel des catégories des dépôts Debian:
A minima il vous faudra garder 'main', l'ajout des 2 autres est à votre convenance. Maintenant un petit tour sur les dépôts officiels de Debian, ceux-ci vous garantissent une stabilité et la sécurité de votre système. En voici la liste:
Une fois que vous serez plus à l'aise avec cette distribution, vous découvrirez d'autres dépôts plus ou moins "exotiques". Vous serez tenté de les ajouter, encore et encore, mais attention, la multiplication des dépôts et notamment les non-officiels augmente le risque d'instabilité, donc refrénez-vous et n'ajoutez des dépôts que si vous en avez vraiment besoin. Mais signalons tout de suite, 2 dépôts que vous trouverez certainement utiles, voire indispensables:
L'intitulé du premier est assez explicite, mais le second mérite un peu d'explications. Le dépôt backports permet d'obtenir des versions de logiciel plus récentes que celles proposées dans les dépôts courants. Bon, on la fait cette mise à jour ? La commande pour tout ce qui concerne les paquets (les logiciels téléchargés pour installation sont "empaquetés") est apt-get (1). Il nous faut d'abord lui indiquer où se trouve des dépôts, pour cela il nous faut éditer le fichier sources.list # nano /etc/apt/sources.list On y commente (mettre un # en début de ligne) la ligne "deb cdrom: ..." et on ajoute en fin de fichier les 6 lignes des dépôts officiels cités précédemment. Ensuite on met à jour l'index (liste des paquets installables): # apt-get update Puis on met à jour les applications qui doivent l'être: # apt-get upgrade Et voila notre système est à jour. 1 - En fait il existe en mode console une autre commande, 'aptitude' et elle est plus performante que apt-get. Pourquoi privilégier apt-get, tout simplement parce que la lecture de différents posts sur Internet indique une gestion des logs/historiques différentes selon que l'on utilise apt-get ou aptitude. Ce n'est pas catastrophique en soi, mais du coup il est préférable de n'utiliser en permanence soit l'un soit l'autre. D'autre part, aptitude a un 'frontend' utilisant ncurses donc utilisable en console, c'est bien pour les serveurs, mais pour un PC on utilisera de préférence synaptic qui lui est le frontend entièrement graphique de apt-get. Donc, comme ici, une fois le serveur X installé (le serveur graphique et non pas ce que vous avez pensé) nous utiliserons synaptic ... 3 - Installons OpenboxJe vous passe les détails du pourquoi, c'est un des gestionnaire de fenêtres le plus léger et hautement configurable, etc. Pour plus de détails voir le site d'Openbox (en anglais :-( ou éventuellement celui-ci en français mais pour Ubuntu) Ici, vous avez compris, on n'installe que Openbox, si vous voulez une autre configuration (Openbox peut être couplé avec Gnome, Kde, Xfce, ...) et bien il vous faudra chercher ailleurs. Bon c'est parti: # apt-get install openbox obconf obmenu Les 2 derniers paquets seront bien utiles pour configurer l'apparence et le menu. Quelques outils graphiques propres au matériel (j'ai une carte graphique Intel GMA X3100) # apt-get install xfonts-base xserver-xorg-video-* x11-utils x11-xserver-utils xorg Et un paquet pour démarrer le serveur X (serveur graphique) # apt-get install xinit On crée aussi le .xinitrc ainsi: $ nano ~/.xinitrc #!/bin/bash exec open-box-session Tout est prêt pour lancer Openbox, ce que l'on fait sans tarder: $ startx Bon nous obtenons un bel écran noir, et nous obtenons un menu que par un clic droit. Pour être dépouillé, c'est dépouillé, et aucune application n'est installée pas même un terminal (et c'est normal, puisque c'est ce que nous avons voulu). Mais pas de panique nous allons agrémenter tout cela, mais il nous faut d'abord sortir (clic sur exit) pour installer d'autres paquets en mode console. Avant d'aborder les chapitres suivants, essayez de jeter un œil sur les programmes cools qui tournent avec Openbox, cela pourra éventuellement guider vos choix. 4 - Les logicielsOui, c'est pas banal, mais je commence par quelques logiciels indispensables, cela donnera plus de corps au menu, ainsi lors de la configuration de notre Openbox nous aurons de la matière (par exemple pour l'édition du menu et de ses catégories). Commençons par le terminal, un classique: # apt-get install xterm Ensuite un gestionnaire de fichiers, ici j'ai hésité entre pcmanfm et thunar. Les 2 sont réputés légers, et sur les forums il n'y a pas vraiment de position tranchée en faveur de l'un ou l'autre (Pour Thunar il manque les onglets, pour PCmanFM le chemin cliquable et pour les deux : une sélection par simple clic avec outil de sélection sur l'icone du fichier, un manque les miniatures de LibreOffice alors que j'ai installé le paquet). Donc il faut essayer. Comme j'ai Thunar sur une Crunchbang, j'installe ici pcmanfm: # apt-get install pcmanfm Maintenant un navigateur web serait utile, si ce n'est indispensable. Là aussi j'ai hésité entre chromium-browser le navigateur libre en pointe sur lequel est fondé Google Chrome et réputé léger, ou celui que j'utilise sur tous mes micros, à savoir Firefox appelé ici iceweasel. Bon il fallait bien que je le teste un jour, et puis ces derniers temps Firefox à tendance à crasher (trop d'onglets ouverts, ou propre à l'environnement Linux je ne sais pas), donc: # apt-get install chromium-browser Nota: Chromium est sympa, mais j'ai du mal à me passer de Firefox. J'ai installé les 2 ! Une application qui gère les archives compressées est souvent utile. file-roller est un candidat mais dépend de librairies Gnome et surtout demande 2 fois plus d'espace disque que xarchiver (14Mo), donc: # apt-get install xarchiver Nous avons nano et vi comme éditeur de texte, mais cela reste très rudimentaire. Certains installent leafpad, mais je n'aime pas (car il ne gère pas bien les écritures de programmes), je lui préfère gedit, mais gedit demande des librairies de Gnome et reste lourd (63Mo contre 463ko d'espace disque nécessaire) par rapport à leafpad. Donc pour l'instant: # apt-get install leafpad Nota: je suis resté avec leafpad, car ensuite pour mes programmes j'ai installé Geany un éditeur de texte aux fonctionx d'environnement de développement intégré -(IDE) Bon cela suffit pour le moment, voyons ce que cela peut donner en mode graphique, lançons startx. PS: J'ai aussi ajouté pour les captures d'écran gnome-screenshot (1 seul fichier d'installé). Le raccourci clavier [IMPR] et [Alt]+[IMPR] fonctionnent respectivement pour la capture d'écran et la capture de la fenêtre active. 5 - Configurer le bureauOn retrouve notre écran noir, mais cette fois un clic droit puis un clic sur Web browser lance chromium (ou le navigateur que vous avez installé), de même Terminal emulator lance xterm. Cependant on ne voit pas les autres applications et si on a le malheur de réduire les fenêtres, elles disparaissent du paysage. Certes un alt-Tab vous permettra de les retrouver. Mais ce n'est pas des plus pratiques. Par ailleurs le bureau ne prend pas toute la largeur de mon écran. Bref il y encore un peu de boulot ! 5.1 - Le menuCommençons par ajouter les programmes installés dans le menu, c'est le boulot de obmenu ... qui n'apparaît pas dans le menu ! Il nous faut le lancer en ligne de commande. # obmenu Et nous allons ajouter de suite obmenu dans le menu. Pour cela:
Une fois terminé, n'oubliez pas de sauvegarder: un clic sur l'icône représentant une disquette. Maintenant obmenu est directement accessible du menu. Il ne vous reste plus qu'à faire de même pour toutes les applications que vous avez/allez installées/er. Nota 1: vous pouvez aussi créer votre menu en éditant le fichier ~/.config/openbox/menu.xml, utile à garder en tête, car pour une nouvelle installation ou une mémorisation, un copier/coller peut faire gagner du temps. Nota 2: Pour un menu dynamique cf. le point 5.4 de cette page. Nota 3: J'ai mis également dans le menu des entrées 'Déconnexion', 'Redémarrer', 'Eteindre' avec pour écriture dans le fichier .config/openbox/menu.xml : <item label="Déconnexion"> <action name="Exit"/> </item> <item label="Redémarrer"> <action name="Execute"> <execute>sudo shutdown -h now</execute> </action> </item> <item label="Eteindre"> <action name="Execute"> <execute>gksu -S 'shutdown -h now'</execute> </action> </item> Malheureusement cette configuration met longtemps pour s'arrêter lorsque mon micro est connecté sur mon serveur de fichiers, car il attend le démontage des partages smb. Pour éviter cela j'ai céé 2 scripts redemarrer.sh et arreter.sh qui ajoutent au shutdown un appel à my_smbumount (cf. ma page Installer les clients Samba). 5.2 - Des raccourcis clavier
Pour la personnalisation des raccourcis clavier, cela se passe dans la section "keyboard" du ~/.config/openbox/rc.xml. J'avoue ne pas m'y être penché tout de suite, car par défaut cela me convient assez et je n'ai pas de touches spéciales sur ce micro. La configuration par défaut permet (je ne cite que ce qui m'a 'surpris' au début) :
L'écriture (format xml) n'est pas complexe. Sinon un programme Python obkey permet de faire cela graphiquement (mais je n'ai pas essayé). 5.3 - Une barre des tâchesUne petite barre des tâches peut quand même être utile (mais c'est vous qui voyez). Des barres de tâches, il en existe plusieurs, mais il y en une qui a été créée spécifiquement pour Openbox: tint2, donc: # apt-get install tint2 Pour voir son fonctionnement il suffit de lancer dans un terminal: # tint2& #'&' sert à lancer la commande en tâche de fond Mais pour lancer cette barre des tâches automatiquement au démarrage d'Openbox il nous faut l'indiquer dans un fichier appelé ~/.config/openbox/autostart.sh (ou autostart). S'il n'existe pas encore, il faut copier celui par défaut et l'éditer afin d'y insérer la commande tint2&. Il peut-être utile aussi de personnaliser sa barre de tâche tint2. Cela se passe sous ~/.config/tint2/tint2rc si ce répertoire/fichier n'existe pas il faut le créer: $ mkdir -p ~/.config/tint2/ $ cp /etc/xdg/tint2/tint2rc ~/.config/tint2/ Il ne reste plus qu'à vous amuser à peaufiner cette barre de tâche. 5.4 Un menu dynamique à la LXDEPour les menus dynamiques rangés proprement avec des icônes j'ai suivi le thread de Fabrice Thiroux. Il permet d'avoir un menu bien organisé et plus visuel puisque les icônes des applis sont affichées. Malheureusement l'installation doit se faire 'à la main', mais cela vaut le coup et ce n'est pas si difficile. L'arrivée du package debian est attendue pour une version prochaine de Debian (la Wheezy ?) Nota: J'ai découvert dans ce guide sur OpenBox que menumaker gérait également les menus dynamiques. Et sur un forum j'ai vu au moins un utilisateur content. Pour ma part je ne l'ai pas essayé mais je le ferai un de ces jours (même si je ne suis pas sûr d'avoir droit aux icônes, mais c'est du pur Python donc cela doit pouvoir s'adapter à ce que je veux ...). 5.5 Affichage des paramètres système avec ConkyAvec conky vous pouvez vraiment afficher tout et n'importe quoi. En voici un exemple: Comme vous pouvez le voir sur cette première ébauche, moi je m'en sers surtout pour avoir une visibilité sur l'état global de mon système (identité, charge CPU, occupation RAM et HD, infos de connexion Internet, process en cours et ports ouverts), mais d'autres vont afficher la météo, le titre de la chanson qu'ils sont en train d'écouter etc, etc. Sur le net vous trouverez une multitude d'exemples de fichiers de configuration, l'infini des réponses est à l'image de l'infini des configurations. Vous avez bien sûr le site officiel de conky, mais aussi des threads insondables sur les forums de distributions: celui de Ubuntu version anglaise fait état en ce début d'année 2015 de 22999 posts !!!. La version française en est au 5ième thread sur le sujet avec quand même un cumul de 9683 posts !! . Quant à Crunchbang qui je le rappelle est une distri basée sur Openbox, son site a un excellent wiki sur le sujet et en français (dommage que je ne l'ai pas trouvé de suite, cela m'aurait évité quelques tatonnements), dans lequel vous trouverez entre autres un lien sur un thread en anglais qui renvoie également sur un thread en français ... le 4ième d'Ubuntu (celui qui m'a servi d'inspiration). En résumé: Vous pouvez commencer par:
Voici le conky.conf auquel je suis arrivé en copiant toutes les petits bouts de code sympa que j'ai trouvés. Je l''ai abondamment commenté afin d'expliquer le pourquoi des choses (attention cependant il n'affiche pas tout à fait ce qui est réprésenté plus haut).
Cela dit je suis loin d'avoir exploré toute les possibilités surtout lorsqu'on voit certaines réalisations qui utilisent directement le langage de programmation lua. Attention, commencer à peaufiner son Conky devient vite addictif ... 6 - Ouvrir sa session en mode graphiqueLancer sa session graphique avec la commande startx cela a son charme, mais un démarrage de session par identification sous mode graphique c'est sympa aussi, surtout si on le modèle comme on le souhaite. Voici mon écran d'identification: On aime ou pas mais c'est original non ? Pour cela, il faut configurer ce qui s'appelle un Display Manager (ou Session Manager). Des DM, il en existe plusieurs, souvent liés à l'environnement de bureau:
Ici, j'ai installé XDM (X Display Manager) car parmi les DM 'indépendants', c'était (de mémoire) celui qui n'avait pas de défaut/manque de fonctionnalité (comme l'accès à distance), et qui était hautement configurable. L'installation ne pose pas de problème, vous le trouverez facilement avec Synaptic. Pour la configuration, j'ai suivi ce pdf de Jérôme Desmoulins (que vous trouverez aussi en local ici). Pour info, voici mes fichiers de configuration:
#!/bin/sh # This script is run as root before showing login widget. xloadimage -onroot -quiet -fullscreen /home/freecrazy/Images/Wallpaper/1280_R$ # Pour une capture d'écran qui s'enregistrera sous /. #gnome-screenshot --delay=5 & Bien sûr le wallpaper est l'image que vous voulez avoir en fond d'écran à l'affichage de votre DM.
Xcursor.theme: whiteglass !Xcursor.theme: redglass xlogin*login.translations: #override \ Ctrl<Key>R: abort-display()\n\ <Key>F1: set-session-argument(failsafe) finish-field()\n\ <Key>Delete: delete-character()\n\ <Key>Left: move-backward-character()\n\ <Key>Right: move-forward-character()\n\ <Key>Home: move-to-begining()\n\ <Key>End: move-to-end()\n\ Ctrl<Key>KP_Enter: set-session-argument(failsafe) finish-field()\n\ <Key>KP_Enter: set-session-argument() finish-field()\n\ Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\ <Key>Return: set-session-argument() finish-field() ! position xlogin*geometry: 440x220+10+10 xlogin*greeting: Bienvenue sur CLIENTHOST (lune de Xena) xlogin*namePrompt: \040\040\040\040Login: xlogin*fail: Login incorrect ! la fonte du message de Bienvenue xlogin*greetFont: -adobe-helvetica-bold-o-normal--14-*-100-100-p-*-iso8859-1 ! la fonte de la saisie utilisateur xlogin*font: -adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1 ! la fonte du prompt (username password) xlogin*promptFont: -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1 ! la fonte du message Login failed xlogin*failFont: -adobe-helvetica-bold-o-normal--12-120-75-75-p-*-iso8859-1 xlogin*greetFace: Serif-14:bold:italic xlogin*face: Helvetica-10 xlogin*promptFace: Helvetica-10:bold xlogin*failFace: Helvetica-12:bold ! Bordures xlogin*borderWidth: 1 xlogin*frameWidth: 5 xlogin*innerFramesWidth: 2 ! Couleurs bleue de la bordure xlogin*shdColor: #0066CC xlogin*hiColor: #0000CC ! Couleurs du fond et des caractères xlogin*background: white !xlogin*foreground: darkgreen xlogin*greetColor: Blue3 xlogin*failColor: red *Foreground: darkgreen !*Background: #fffff0 ! Je ne sais pas trop à quoi cela sert XConsole.text.geometry: 480x130 XConsole.verbose: true XConsole*iconic: true XConsole*font: fixed ! idem ici Chooser*geometry: 700x500+300+200 Chooser*allowShellResize: false Chooser*viewport.forceBars: true Chooser*label.font: *-new century schoolbook-bold-i-normal-*-240-* Chooser*label.label: XDMCP Host Menu from CLIENTHOST Chooser*list.font: -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1 Chooser*Command.font: *-new century schoolbook-bold-r-normal-*-180-* Nota: Comme souvent le man peut être aussi une bonne source d'inspiration (le man en ligne - en anglais ) 7 - Les petits soucis7.1 - Lors du upgrade à Wheezy le montage automatique des clés USB ou autre SD card ne fonctionne plus.Je ne suis pas le seul dans ce cas, et à priori ne concerne pas que PCManFM (cf. ce thread sur le forum Debian) ni même la distribution, il n'est qu'à voir le nombre de discussions relatives à ce sujet sur le bbs d'ArchLinux par exemple. Plusieurs solutions plus ou moins semblables y sont proposées, mais la seule qui ait fonctionné dans ma configuration est d'ajouter le fichier /etc/polkit-1/localauthority/50-local.d/50-mount.pkla comprenant: [Mount external device] Identity=* Action=org.freedesktop.udisks.* ResultAny=yes ResultActive=yes ResultInactive=yes A noter (si l'ajout de ce fichier fonctionne):
7.2 - Partition racine saturée (ou comment libérer de l'espace disque)
J'ai voulu télécharger SPIP, mais impossible. Un coup d’œil à $ df -hl (ou $ xdiskusage que je préfère à une alternative toute aussi légère, utilisant ncurses: $ ncdu), il est clair que ma partition racine est pleine (100%). Pour faire le ménage, j'ai bien sur ce site cette page, mais très spécifique Gentoo (sauf les points 3 et 5 relatifs au nettoyage de /usr/src et des fichiers temporaires sous /tmp/ et /var/tmp. Pour une Debian, il y a: # apt-get clean # apt-get autoclean Cela me fait déjà gagner plus de 3 Go! Quelques autres idées sur ce thread (forum de l'hébergeur OVH). Du coup j'ai aussi déplacé mon serveur Spip (unjourbleu) sous mon home, et j'ai créé un lien de /var/www/unjourbleu --> /home/freecrazy/www/unjourbleu afin que cette saturation ne se reproduise plus. (Pour la petite histoire, c'est le proto du site sur l'IA que j'avais annoncé pour ... l'année dernière 2013 !!! J'ai du retard, mais je ne désespère pas.) 7.3 - Comment ajouter une entrée à un menu dynamique ?Cette question est apparue lorsque j'ai installé une application en manuel, en l’occurrence Anaconda ('distribution' Python spécialisée calcul scientifique). L'IDE (Integrated Development Environment) fourni est Spyder, et pour le lancer je passais par la ligne de commande car il n'apparaissait pas dans le menu dynamique. Comment faire pour qu'une entrée Spyder apparaisse dans le menu dynamique, sous le sous-menu 'Programmation' ? Une solution simple aurait été de l'ajouter en statique avec Obmenu, mais dans ce cas je ne pouvais le mettre dans le menu dynamique ! Une autre solution aurait été de peut-être (car je n'ai pas essayé) installer Spyder via Synaptic. J'aurai bien eu son entrée dans le menu dynamique mais dans ce cas la version de Spyder aurait été une version antérieure à celle fournie avec Anaconda (on est sous Debian ne l'oublions pas) et il aurait certainement été nécessaire de bidouiller pour faire en sorte que Spyder se lance avec la version Python d'Anaconda. Rien d'insurmontable je pense mais je ne trouve pas cela très propre et les mises à jour auraient certainement été problématiques. J'ai cherché une autre solution répondant strictement à ce que je recherchais, à savoir une entrée Spyder d'Anaconda dans mon menu dynamique sous le sous-menu 'Programmation'. Pour cela regardons comment se fait le lancement d'une appli à partir du menu: L'affichage du menu s'effectue en allant lire ~/.config/openbox/menu.xml qui ressemble à : <?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
<menu id="root-menu" label="Openbox 3">
<item label="Web browser">
<action name="Execute">
<execute>
x-www-browser
</execute>
</action>
</item>
....
<separator/>
<menu execute="cat ~/.cache/openbox-menu.xml" id="desktop-app-menu"
label="Applications"/>
</menu>
</openbox_menu>
On voit que ce dernier exécute "cat ~/.cache/openbox-menu.xml" afin d'afficher toutes les applis du menu dynamique. openbox-menu.xml ressemble à ceci (ce qui est important c'est la structure et non les applis présentes qui elles ne dépendent que de vous): <openbox_pipe_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd"> ... <menu id="openbox-Development" label="Programmation" icon="/usr/share/....png"> <item label="Arduino IDE" icon="..."><action name="Execute"><command><![CDATA[arduino]]></command> </action></item> <item label="Eclipse" icon="..."><action name="Execute"><command><![CDATA[eclipse]]></command> </action></item> <item label="Eeschema" icon="..."><action name="Execute"><command><![CDATA[eeschema]]></command> </action></item> <item label="Geany" icon="..."><action name="Execute"><command><![CDATA[geany]]></command> </action></item> <item label="GNU Octave" icon="..."><action name="Execute"><command><![CDATA[xterm -e /usr/bin/octave]]></command> </action></item> <item label="ipython" icon="/..."><action name="Execute"><command><![CDATA[xterm -e ipython]]></command> </action></item> <item label="KiCad" icon="..."><action name="Execute"><command><![CDATA[kicad]]></command> </action></item> <item label="QtOctave" icon="..."><action name="Execute"><command><![CDATA[qtoctave]]></command> </action></item> </menu> .... </openbox_pipe_menu> Bien sûr je n'ai pas tout mis. La structure globale est donc: <menu id="..." ...> pour appeler un sous-menu et <item label="..." ...> pour appeler une appli. Voici l'affichage correspondant ( 'openbox-Development' = Programmation): A partir de là, la solution semble assez simple, il suffit de modifier le fichier ~/.cache/openbox-menu.xml. Certes, mais c'est un fichier dynamique qui est chargé à chaque redémarrage, et je ne compte pas m'amuser à écrire à chaque fois une ligne à rallonge dans openbox-menu.xml. Aie ! cela se complique. Et si au lieu de lancer "cat ~/.cache/openbox-menu.xml" dans le fichier ~/.config/openbox/menu.xml on lançait une autre commande bash qui ajoute une ligne Spyder avant ... disons la ligne Geany. J'ai la commande pour trouver le numéro de la ligne contenant "Geany": NLIGNE=$(grep -n "Geany" openbox-menu.xml | mawk -F ':' '{print $1}') J'ai aussi la commande pour insérer la ligne d'entrée de Spyder au bon endroit (79 ici, ce que me renvoie NLIGNE) sed -i 79i'<item label="Spyder" icon="./anaconda3/share/pixmaps/spyder3.png"><action name="Execute"> <command><![CDATA[./anaconda3/bin/spyder]]></command>\n</action></item>' openbox-menu.xml Mais je n'ai pas réussi à mettre tout cela ensemble pour en faire une ligne de commande valide dans le fichier ~/.config/openbox/menu.xml . Bouh, cela devient vraiment rasoir ! Je ne suis vraiment pas bon en programmation moi. Au bord de la déprime (oui je suis comme cela quand cela ne marche pas comme je veux), je change de stratégie: si je n'arrive pas à écrire un script en Bash, je vais bien réussir à l'écrire en Python. C'est parti ! Quelques instants après, j'ai un script Python: #! /usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon Dec 15 16:55:32 2014 @author: freecrazy """ def ajout_ligne(filename, ligne, tag): """ Cette fonction ajoute au fichier 'filename', une 'ligne' avant la ligne caractérisée par la présence de 'tag'. On vérifie bien sûr que 'ligne' n'est pas déjà présente. - filename: chemin absolu du fichier - ligne: text (chaîne de caractères) à ajouter (les fins de ligne sont \n) - tag: text (chaîne de caractères) caractérisant la ligne du fichier avant laquelle on veut insérer notre ligne """ with open(filename, 'r+') as file: text = file.read() if (text.find(ligne) != -1): pass else: try: i = text.index(tag) #on aurait pu prendre find avec un if else file.seek(0) file.write(text[:i] + ligne + text[i:]) except: pass if __name__=="__main__": ''' Ce programme ajoute une entrée 'Spyder' avant l'entrée 'Geany' du menu dynamique d'openbox. Le print(text) final tient lieu du cat ~/.cache/openbox-menu.xml qui se trouve dans ~/.config/openbox/menu.xml. Ce dernier doit d'ailleurs être modifié en conséquence en appelant ce programme en lieu et place du 'cat ...' ''' filename='/home/freecrazy/.cache/openbox-menu.xml' ligne='<item label="Spyder" icon="./anaconda3/share/pixmaps/spyder3.png"><action name="Execute"> <command><![CDATA[./anaconda3/bin/spyder]]></command>\n</action></item>\n' tag='<item label="Geany" ' ajout_ligne(filename, ligne, tag) with open(filename,'r') as file: text = file.read() print(text) Sur le code pas grand chose à dire, si ce n'est:
Voilà il ne reste plus qu'à placer ce fichier que j'ai intitulé "insert_ligne_OBmenu.py" dans ~/.cache/, et de modifier l'appel "cat ~/.cache/openbox-menu.xml" dans le fichier ~/.config/openbox/menu.xml par "~/.cache/insert_ligne_OBmenu.py", et au prochain redémarrage (ou mieux après un 'Reconfigure' du menu Openbox), j'obtiens: 7.4 - Conky: can't open /proc/acpi/battery/ No such file or directoryPour mesurer la batterie, Conky intègre des commandes qui vont lire les données délivrées par acpi ou apm (ce dernier étant le prédécesseur d'acpi): $battery, $battery_bar, $batterry_percent ... Seulement voilà sur ma configuration cela ne fonctionne pas, j'ai un message d'erreur de type: "can't open /proc/acpi/battery/ No such file or directory". Pourtant acpi est installé (dans le doute j'ai même installé acpitool). Mais Conky cherche désespérément des infos dans un dossier /proc/acpi/battery/ qui n'existe pas !. Les quelques threads marqués comme résolus que j'ai lus sur le sujet donnent comme solution ... le non affichage de la donnée. Un peu léger ! Pour ma part, ce n'est pas que je voulais absolument l'info (je l'ai dans la barre tint2 et dans le menu grâce à un pipe), mais je me suis dit qu'il doit quand même bien être possible d'afficher dans Conky cette info disponible par ailleurs. Je n'ai pas cherché longtemps, j'ai pris la ligne de commande du pipe de mon menu à base d'acpi, de grep et de sed et je l'ai fait exécuter par Conky. Pour voir à quoi cela ressemble voici mon conky.conf . Il y a certainement plus élégant mais cela marche. 8 - Sources et liens
9 - To Do liste
Actions sur le document |
|