Vous n'êtes pas identifié(e).
Bonjour,
Pouvez-vous poster les pipe-menus que vous utilisez souvent, avec une copie d'écran svp!
En voici un qui permet d'afficher/parcourir/démonter (sauf ceux montés en root) ce qui se trouve dans /media ou /mnt, Le bouton Parcourir appelle le script livré avec crunchbang.
C'est en lua parceque j'ai repris une partie de code d'un de mes conky, ça serait donc peut-être plus court en bash ... enfin bon.
Il faut installer luafilesystem, sur Statler, c'est le paquet liblua5.1-filesystem0 et lua si ce n'est pas déjà fait :
sudo apt-get install lua50 liblua5.1-filesystem0
Crunchbang est une clé-live, pas le système !
Le script, il faut définir les programmes utilisés pour le terminal et le navigateur de fichiers au début du script
#!/usr/bin/env lua
-- affiche les medias montés dans /mnt ou /media dans un pipe menu
-- necessite l'installation de liblua5.1-filesystem0
-- par wlourf v1.1 26/09/2010
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation version 3 (GPLv3)
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-- MA 02110-1301, USA.
file_manager = 'thunar'
cmd_terminal = 'gnome-terminal --hide-menubar --working-directory='
function string:split(delimiter)
--source for the split function : http://www.wellho.net/resources/ex.php4?item=u108/split
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
local f = io.popen("mount")
local results={}
while true do
local line = f:read("*l")
if line == nil then break end
if (string.find(line,"media") ~=nil or string.find(line,"mnt") ~=nil) then
local arr_l=string.split(line," ")
local caption=string.gsub(string.gsub(arr_l[3],"/mnt/",""),"/media/","")
table.insert(results,{"_" .. caption,arr_l[3]})
end
end
f:close()
print ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
print ("<openbox_pipe_menu>")
--trier un tableau contenant un tableau ?
if table.getn(results)>1 then
local flagS=true
while flagS do
for k=2, table.getn(results) do
flagS=false
if results[k][1]<results[k-1][1] then
local tmpV = results[k-1]
results[k-1] = results[k]
results[k] = tmpV
flagS=true
end
end
end
end
if table.getn(results)>0 then
for i,k in ipairs(results) do
print("<menu id=\"mount" ..tostring(i) .."\" label=\"" .. k[1] .. "\">")
print(" <item label=\"O_uvrir avec ".. file_manager .."\">")
print(" <action name=\"Execute\"><execute>".. file_manager .." "..
k[2] .. "</execute></action>")
print(" </item>")
print(" <item label=\"Ouvr_ir dans un terminal \">")
print(" <action name=\"Execute\"><execute>".. cmd_terminal .. k[2]
.."</execute></action>")
print(" </item>")
print("<separator/>")
print("<menu id=\"places" .. tostring(i) .. "\" label=\"P_arcourir\""..
" execute=\"~/.config/openbox/pipemenus/obpipemenu-places "
.. k[2] .."/\" />")
print("<separator/>")
print(" <item label=\"Démo_nter \">")
print(" <action name=\"Execute\"><execute>umount " .. k[2]
.."</execute></action>")
print(" </item>")
print ("</menu>")
end
else
print(" <item label=\"Aucun disque monté\" />")
end
print("</openbox_pipe_menu>")Par contre, quand je fais "démonter", je n'ai pas la notification comme quoi le disque peut être démonté en sécurité, des idées ?
Edit, pour l'intégrer dans menu.xml au cas où ce ne soit pas évident :
<menu id="ID_disques" label="Disques m_ontés" execute="lua ~/scripts/pipe-mounts/mounts.lua" />Edit : script modifié pour ne plus planté quand il n'y a rien de monté ou un seul disque présent...
Dernière modification par wlourf (2010-09-26 21:37:18)
Hors ligne
Super wlourf, et merci pour l'initiative !
PS : j'ai déplacé ton sujet ici.
Hors ligne
Merci wlourf!
Je dois avouer que les pipemenus sont encore un graaaand mystère dans ma tête, c'est sympa de poster le tien ici, je vais le tester pour essayer de comprendre.
Hors ligne
Leyna, rien de bien mystérieux là-dedans !
A partir du moment où tu as un script (bash, python, lua etc ..) .qui t'affiche des infos en mode console, tu peux les intégrer dans ton menu si la sortie est bien formatée pour le rc.xml
http://openbox.org/wiki/Help:Menus#Pipe_menus
Hors ligne
Je ne comprends pas, ça fait ça chez moi:
Une tite barre noire qui sort du menu, sans rien dedans... Jamais vu ça!
Le chemin de mon script: ~/Scripts/pipemenu_mount.lua (correctement remplacé dans l'entrée du menu ob)
Je lui ai fait un chmod +x
J'ai remplacé thunar & gnome-terminal par 'nautilus --no-desktop' et terminator
J'ai raté quelque chose? 
Hors ligne
as-tu essayé, dans un terminal, pour vérifier si le script appelé fonctionne bien :
lua ~/scripts/pipe-mounts/mounts.luaaurais-tu oublié d'installer liblua5.1-filesystem0 (cf 1er message)?
Hors ligne
Hum... Alors au début j'aurais aimé supprimer mon message pour effacer ma honte.. En effet je n'avais installé ni lua ni liblua-trucmuche! Aussitôt rectifié. Mais ensuite c'était pire, puisque quand j'ai lancé le script dans un terminal toute ma session s'est bloquée, la souris bougeait mais impossible de cliquer sur quoi que ce soit. J'ai rebooté puis j'ai lancé mon menu ob, quand ma souris est passée sur l'entrée des disques montés, même problème qu'avec le terminal, tout a freezé. J'ai laissé longtemps en l'état, pour voir s'il fallait attendre quelque chose... mais rien du tout. J'ai encore rebooté en mode sauvage.
Bon là je comprends rien -_-
Hors ligne
hhhmmm, ça sent pas bon ça pour inaugurer ce topic ! je suis avec Statler et sauf erreur de ma part Lua est livré avec ! D'ailleurs qui a dit qu'il fallait installer lua ? (Juste lua-filesystem j'avais précisé !).
Donc, je sais pas quoi dire, mount te retourne bien quelque chose (tu as bien des partitions sur /mnt ou /media)? et lua -v te dit quoi ?
(J'aurai du le faire en bash ce script ...)
Edit : en effet il y avait 2 bugs corrigés dans le premier post : ça plantait si le nombre de disques montés était inférieur ou égal à 1 , quelle honte
on efface les messages précédents ?
Sinon, en cas de plantage, ouvre un tth 'alt+ctrl +F1' par exemple et fait un
killall luaou
ps -e | grep luaet kill le plus grand nombre retourné et revient ensuite dans ta session avec 'alt+ctrl+F7' si tu n'as pas modifié tes tth par défaut.
Dernière modification par wlourf (2010-09-26 21:44:57)
Hors ligne
Je suis bien sous Statler mais le paquet lua5.1 n'était pas installé! C'est fait maintenant.
Maintenant ton script fonctionne parfaitement. Je crois effectivement que ça venait des 2 bugs que tu as corrigés, parce que je n'avais qu'une partition dans /media quand j'ai fait ces tests. Là je viens d'essayer avec une, puis deux, puis trois partitions, tout marche nickel.
MERCI 
PS: c'est pas demain que je plongerai les mains dans le cambouis a.k.a lua... 
Hors ligne
En voici un tout simple, pour l'exemple (ne pas oublier le chmod +x ):
#!/bin/bash
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
echo "<openbox_pipe_menu>"
echo "<item label=\"$(date +"%d/%m %H:%M")\" />"
echo "</openbox_pipe_menu>"dans rc.xml
<menu id="Date" label="D_ate" execute="~/scripts/pipe-clock/date-time.sh" />et la sortie
reste plus qu'à l'intégrer dans la racine du menu ...
Hors ligne
chwette sujet!
histoire de bien débuter sur ce forum, voici une petite contribution.
en gros et en résumé, ça vous affiche (ou pas) les mises à jour système.
.. mais ça a aussi le gros inconvénient de ne pas être très rapide (euphémisme) - raison de cet abandon prématuré 
#!/bin/sh
apt(){
aptitude search "~U" | wc -l | tail
}
rst=$(apt)
format(){
if [ $rst = 1 ]; then
{
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
echo "<openbox_pipe_menu>"
echo " <item label=\"$(apt) update available\">"
echo " <action name=\"Execute\">
<execute>system-update -n</execute>
</action>
</item>"
echo "</openbox_pipe_menu>"
}
elif [ $rst -gt 1 ]; then
{
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
echo "<openbox_pipe_menu>"
echo " <item label=\"$(apt) updates available\">"
echo " <action name=\"Execute\">
<execute>system-update -n</execute>
</action>
</item>"
echo "</openbox_pipe_menu>"
}
else
{
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
echo "<openbox_pipe_menu>"
echo " <item label=\"no update available\">"</item>"
echo "</openbox_pipe_menu>"
}
fi
}
format
exit 0oui, ça demande d'être revu et corrigé. on est d'accord.
Hors ligne
salut
j'ai pas "system-update" sur Statler et pourquoi dis-tu que ce n'est pas rapide?
je me suis permis de modifier ton script pour qu'il soit en français et plus court !
Et la mise à jour s'ouvrira dans une fenêtre de gnome-terminal
#!/bin/bash
rst="$(aptitude search "~U" | wc -l | tail)"
pluriel=""
if [ $rst -gt 1 ]; then
pluriel="s"
fi
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
echo "<openbox_pipe_menu>"
if [ $rst -gt 0 ]; then
echo "<item label=\"$rst m-à-j disponible$pluriel\">"
echo "<action name=\"Execute\">"
echo "<execute>gnome-terminal -e \"sudo apt-get upgrade \"</execute>"
echo "</action></item>"
else
echo "<item label=\"Système à jour\" />"
fi
echo "</openbox_pipe_menu>"
exit 0bon sang, j'ai 129 mises à jours disponibles 
Hors ligne
j'ai pas "system-update" sur Statler et pourquoi dis-tu que ce n'est pas rapide?
je me suis permis de modifier ton script pour qu'il soit en français et plus court !
Et la mise à jour s'ouvrira dans une fenêtre de gnome-terminal
oups! ouais, j'aurais peut-être dû spécifier que je suis encore sous #! 9.04..
je trouve que c'est un peu "lent" car à chaque fois que je passe sur le menu (<menu id=blabla />) le système "freeze" pendant 2-3 secondes, le temps d'exécuter le script.. mais c'est peut-être lié au fait que j'utilise un vieux portable (dell latitude d505)
cela dit, sympa ton optimisation!
question subsidiaire: serait-il possible d'afficher le menu uniquement si des mises à jour sont disponibles? autrement dit, est-ce que les pipe-menus sont forcément dans un menu ou peuvent-ils être à la racine du menu.xml d'ob?
Dernière modification par jean-pute (2010-10-08 13:35:03)
Hors ligne
Bon histoire de remplir le topic :
% of non-free
( dépendance : sudo apt-get install vrms )
#!/bin/bash
###########################################################################################################
## PipeMenu Openbox by z0rg> ##
## http://interog.free.fr ##
## ##
## Menu.xml = <menu execute="/home/$USER/script/non-free" id="free-menu" label="% of non-free"/> ##
## Usage : % of non-free packages ##
###########################################################################################################
vrms |tail -2 >temp.txt
var1=`sed -n "1 p" temp.txt `
var2=`sed -n "2 p" temp.txt `
echo "<openbox_pipe_menu>"
echo "<item label=\"$var1\" />"
echo "<item label=\"$var2\" />"
echo "</openbox_pipe_menu>"
rm -r temp.txt
exit 0Dernière modification par z0rg> (2010-10-18 16:37:33)
Hors ligne
Quote Vie De Merde , 3 au hasard
#!/bin/bash
###########################################################################################################
## PipeMenu Openbox modifié par z0rg> ( script original de Ksass`Peuk ) ##
## http://interog.free.fr ##
## ##
## Menu.xml = <menu execute="/home/$USER/scripts/vdm.sh" id="VDM" label="VDM" /> ##
## Usage : 3 Quote VDM au hasards ##
###########################################################################################################
nb=20
nb1=20
nb2=20
function convert ()
{
sed -i 's/\"/`/g
s/\&/`/g' $1
}
while [ "$nb" -gt "15" -o "$nb" -lt "1" ]; do
wget --quiet -O .tmpvdm http://api.viedemerde.fr/1.2/view/random
grep -v '<?xml version="1.0" encoding="UTF-8"?>' .tmpvdm | sed 's/.*\(Aujourd\)/\1/' | sed 's/\(VDM\).*/\1/' | sed 's/&quot;\|"/\"/g' | fold -s -w 60 > .vdmquote
nb=$(sed -n '$=' .vdmquote)
done
convert .vdmquote
echo "<openbox_pipe_menu>"
echo "<item label=\"QuoteVDM - VieDeMerde\">"
echo "<action name=\"Execute\">"
echo "<execute>x-www-browser http://www.viedemerde.fr/</execute>"
echo "</action>"
echo "</item>"
echo "<separator label=\"-------\" />"
if [ -f .vdmquote ]
then
while read line1
do
echo "<item label=\"$line1\" />"
done < .vdmquote
else
echo "<item label=\"Une erreur s'est produite, executez le script dans un terminal pour verifier.\" />"
fi
while [ "$nb1" -gt "15" -o "$nb1" -lt "1" ]; do
wget --quiet -O .tmpvdm1 http://api.viedemerde.fr/1.2/view/random
grep -v '<?xml version="1.0" encoding="UTF-8"?>' .tmpvdm1 | sed 's/.*\(Aujourd\)/\1/' | sed 's/\(VDM\).*/\1/' | sed 's/&quot;\|"/\"/g' | fold -s -w 60 > .vdmquote1
nb1=$(sed -n '$=' .vdmquote1)
done
convert .vdmquote1
echo "<separator label=\"-------\" />"
if [ -f .vdmquote1 ]
then
while read line2
do
echo "<item label=\"$line2\" />"
done < .vdmquote1
else
echo "<item label=\"Une erreur s'est produite, executez le script dans un terminal pour verifier.\" />"
fi
while [ "$nb2" -gt "15" -o "$nb2" -lt "1" ]; do
wget --quiet -O .tmpvdm2 http://api.viedemerde.fr/1.2/view/random
grep -v '<?xml version="1.0" encoding="UTF-8"?>' .tmpvdm2 | sed 's/.*\(Aujourd\)/\1/' | sed 's/\(VDM\).*/\1/' | sed 's/&quot;\|"/\"/g' | fold -s -w 60 > .vdmquote2
nb2=$(sed -n '$=' .vdmquote2)
done
convert .vdmquote2
echo "<separator label=\"-------\" />"
if [ -f .vdmquote2 ]
then
while read line3
do
echo "<item label=\"$line3\" />"
done < .vdmquote2
else
echo "<item label=\"Une erreur s'est produite, executez le script dans un terminal pour verifier.\" />"
fi
echo "</openbox_pipe_menu>"
rm .vdmquote .vdmquote1 .vdmquote2 .tmpvdm .tmpvdm1 .tmpvdm2
exit 0Hors ligne
Infos paquets
( Nombre de MAJ et nombre de paquets à problème )
#!/bin/bash
###########################################################################################################
## PipeMenu Openbox by z0rg> ##
## http://interog.free.fr ##
## ##
## Menu.xml = <menu id="Paquet-menu" label="Infos Paquets" execute="/home/$USER/scripts/Read-P" /> ##
## Usage : INFOS PAQUETS AVEC APTITUDE ##
###########################################################################################################
function convert ()
{
sed -i 's/\"/`/g
s/\&/`/g' $1
}
MAJ=$(aptitude search "~U" | wc -l | tail)
aptitude search "~U" |tail >MAJ_D.txt
convert MAJ_D.txt
DEP=$(aptitude search "~b" | wc -l | tail)
aptitude search "~b" |tail >DEP_D.txt
convert DEP_D.txt
echo "<openbox_pipe_menu>"
# recherche de paquets à mettre à jour
if [ "$MAJ" = 0 ]
then
echo "<separator label=\"Votre système est à jour !\" />"
echo "<menu id=\"Détails\" label=\"Détails\">"
echo "<item label=\"Aucun Détail Disponible.\" />"
else
echo "<separator label=\"Il y à $MAJ mise(s) à jour\" />"
echo "<menu id=\"Détails\" label=\"Détails\">"
while read line1
do
echo "<item label=\"$line1\" />"
done < MAJ_D.txt
fi
echo "</menu>"
if [ "$DEP" = 0 ]
then
echo "<separator label=\"Aucun problème de paquet !\" />"
echo "<menu id=\"Détails 1\" label=\"Détails\">"
echo "<item label=\"Aucun Détail Disponible.\" />"
else
echo "<separator label=\"Il y à $DEP paquet(s) à problème(s)\" />"
echo "<menu id=\"Détails 2\" label=\"Détails\">"
while read line2
do
echo "<item label=\"$line2\" />"
done < DEP_D.txt
fi
echo "</menu>"
echo "</openbox_pipe_menu>"
rm -r MAJ_D.txt DEP_D.txt
exit 0Hors ligne
C'est intéressant, merci de partager 
Hors ligne
Un petit pipe (c'est bien masculin, non?
) pour lancer ses radios favorites :
Le script :
#!/bin/bash
#pipe-radios.sh : affiche une liste de radios dans le menu openbox
#par wlourf 23/10/2010, v1.0
#2 paramètres :
#liste, fichier de la liste des radios avec leur flux, séparé par un point virgule
#exemple :
# FIP;http://www.tv-radio.com/station/fip_mp3/fip_mp3-128k.m3u
# ligne vide= séparateur
#player : commande à utiliser pour lancer la radio
liste=~/scripts/pipe-radios/radios.txt
player="vlc"
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
echo "<openbox_pipe_menu>"
IFS=";"
while read line; do
set -- "$line"; declare -a arrLine=($*)
if [ "${arrLine[0]}" == "" ]; then
echo "<separator/>"
else
echo "<item label=\"${arrLine[0]}\">"
echo " <action name=\"Execute\">"
echo " <execute>$player ${arrLine[1]}</execute>"
echo " </action>"
echo "</item>"
fi
done < $liste
echo "</openbox_pipe_menu>"
exit 02 variables à définir au début du script :
- le player de son choix
- le fichier qui contient la liste des radios à afficher, avec le format suivant :
NOM;FLUXNOM = nom qui va s'afficher dans le menu
FLUX = flux de la radio.
Ligne vide= séparateur.
Pour la capture ci-dessus :
FI_P;http://www.tv-radio.com/station/fip_mp3/fip_mp3-128k.m3u
France _Inter;http://www.tv-radio.com/station/france_inter_mp3/france_inter_mp3-128k.m3u
Jazz FM (Ca);http://www.jazz.fm/streaming/JAZZFM91.pls
Planète Jazz;http://stream.rncmedia.ca/planetejazz.mp3
Swiss Jazz;http://www.radioswissjazz.ch/live/mp3.m3uHors ligne
euh, je galère pour faire marcher ce pipe menu sur ma Crunch, j'ai bien suivi toutes les étapes mais rien du tout à la fin ! si vous avez une idée pour régler ce problème ou un autre pipe menu qui a la même fonction, je suis preneur !
PS : Ce pipe menu sert à afficher la météo 
Edit : c'est résolu, le script marche ! encore une connerie de ma part 
Dernière modification par wacly (2010-12-31 19:22:19)
J'utilise Dropbox pour accéder à mes fichiers partout !
6,75 Go grâce à vous 
Hors ligne
un "gros" script python pour afficher les chaines TV et radio du multiposte de free dans un pipe-menu 
le script modifié et mis à jour est maintenant dans ce topic, donc la capture d'écran ci-dessous ne correspond pas à la dernière version du script !
Dernière modification par wlourf (2011-02-04 22:53:43)
Hors ligne
Oh super ça !!!
Merci 
Hors ligne
Hors ligne
lol oui mais je crois qu'il n'y a malheureusement aucun rapport 
Hors ligne
Enorme ! wlourf, tu as le plus gros menu Openbox que j'ai jamais vu 
sinon merci pour le partage 
Edit : comment faire pour qu'un script python puisse afficher les accents du français ?!
Merci d'avance 
Dernière modification par wacly (2011-01-10 20:54:56)
J'utilise Dropbox pour accéder à mes fichiers partout !
6,75 Go grâce à vous 
Hors ligne
Enorme ! wlourf, tu as le plus gros menu Openbox que j'ai jamais vu
sinon merci pour le partageEdit : comment faire pour qu'un script python puisse afficher les accents du français ?!
Merci d'avance
Je n'avais pas vu ton édit, si ce n'est pas résolu, ceci en début de script devrait le faire :
#! /usr/bin/env python
# -*- coding: utf-8 -*-sinon, j'ai modifié le script pour qu'il soit moins gros 
Hors ligne