Probado en...SO: Debian Squeeze
Entorno de Escritorio: Xfce 4.6
NO usar sudo para nada
, no es necesario xD
Puede parecer una chorrada de tuto, pero ojalá lo hubiera encontrado cuando he pasado mi Xfce 4.4 a 4.6
. Este tuto "solo" es útil para aquellos que tenían el Menú de Xfce del panel con el archivo
menu.xml cambiado, puesto que en Xfce 4.6 (aunque creo que a partir de 4.5 ya cambia esto) cambia toda la forma de hacer nuestro propio menú. También puede ser útil para aquellos que quieran personalizar el menú de su Xfce :3.
En anteriores versiones, personalizar el menú era tan fácil como crear un *.xml con los tags necesarios. Ahora, según he entendido leyendo en la wiki y probando, hay que, además de modificar el fichero que contiene el menú, crear archivos *.desktop encargados de cargar las aplicaciones. Puede que haya una forma más fácil, pero tras estar un buen rato trasteando y leyendo el
Wiki de Xfce, he conseguido que funcione xD.
Creamos un archivo (puedes llamarlo como quieras, yo lo he llamado "
b" para mayor facilidad al ejecutarlo desde la consola xD) en el directorio "$HOME/.local/share/applications", y copiamos esto en su interior:
#!/bin/bash
echo "#!/bin/bash" > $1.sh
cat $1 | sed -e "s/\t\t/.\/a /g" | sed -e "s/\t/.\/a /g" | grep "<app name=" | sed -e 's/<app name=//g' | sed -e 's/cmd=//g' | sed -e 's/icon=//g' | sed -e "s/\/>//g" >> $1.sh
echo "rm $1.sh" >> $1.sh
chmod +x $1.sh
./$1.sh
Sin cambiar de carpeta, creamos otro archivo llamado "
a" (este archivo debe llamarse "a" por narices, a no ser que cambiemos el nombre en "s/\t\t/.\/
a /g" y "s/\t/.\/
a /g").
#!/bin/bash
echo "$2" | sed -e "s/\///g" | sed -e "s/\\\//g" | sed -e "s/ //g" | sed -e "s/\///g" | sed -e "s/\\\//g" | sed -e "s/;//g" | sed -e "s/\&//g" | sed -e "s/=//g" | sed -e "s/%//g" | sed -e "s/\.//g" | sed -e "s/\://g" > name.delme
NAME=`cut -b -40 name.delme`
rm name.delme
echo "[Desktop Entry]" >> $NAME.desktop
echo "Version=1.0" >> $NAME.desktop
echo "Type=Application" >> $NAME.desktop
echo "Encoding=UTF-8" >> $NAME.desktop
echo "Exec=$2" >> $NAME.desktop
echo "Icon=$3" >> $NAME.desktop
echo "StartupNotify=false" >> $NAME.desktop
echo "Categories=X-XFCE;X-Xfce-Toplevel;" >> $NAME.desktop
echo "OnlyShowIn=XFCE;" >> $NAME.desktop
echo "Name=$1" >> $NAME.desktop
echo "Comment=$1" >> $NAME.desktop
echo " <Filename>$NAME.desktop</Filename>" >> links
Asignamos poderes de ejecución a cada fichero con:
$ chmod +x a
$ chmod +x b
Por último copiamos en la misma carpeta nuestro archivo de menú personalizado (el mio era
menu.xml). Ahora procedo a explicar el proceso
-
b: Se encargará de crear un archivo bash extrayendo únicamente los datos necesarios de nuestro
menu.xml. Un ejemplo:
Antes:
<app name="Terminal" cmd="xfce4-terminal" icon="terminal"/>
<app name="Thunar" cmd="thunar" icon="Thunar"/>
<app name="Mousepad" cmd="mousepad" icon="mousepad"/>
Después:
./a "Terminal" "xfce4-terminal" "terminal"
./a "Thunar" "thunar" "Thunar"
./a "Mousepad" "mousepad" "mousepad"
-
a: Se encargará de crear los archivos necesarios en la carpeta "$HOME/.local/share/applications" usando los tags "$1=Nombre; $2=Comando; $3=Icono" (icono y comando suelen ser iguales, pero no siempre)
$ ./a "Reproductor de música" audacious audacious
Creará el archivo "audacious.desktop" con la siguiente información (la negrita es la que cambia dependiendo de la apliación, el resto será genérico):
[Desktop Entry]
Version=1.0
Type=Application
Encoding=UTF-8
Exec=audacious
Icon=audacious
StartupNotify=false
Categories=X-XFCE;X-Xfce-Toplevel;
OnlyShowIn=XFCE;
Name=Audacious
Comment=Audacious
Una vez en "$HOME/.local/share/applications" los archivos
a,
b y
menu.xml, podemos empezar a convertirlo. Si has leído el código de
a y de
b, verás que la función de
b es crear un ejecutable para usar el
a con cada linea, y como cada linea corresponde a un programa de nuestro
menu.xml pues lo transforma todo
(igual se podría meter todo con algún bucle
for o algo, pero así me ha funcionado xD). Luego, el propio
b ejecuta el archivo que crea y el archivo creado ejecuta
a en cada linea. Por último, se creará un archivo llamado "
links" en el que pone los enlaces a cada aplicación para copypastearlos en nuestro archivo del menú.
Es tan sencillo como hacer:
$ ./b "nombre_de_mi_archivo_de_menú"
Luego vamos al directorio "/home/ihsan/.config/menus", y creamos nuestro "xfce-applications.menu" que contendrá la información de nuestro menú personalizado. Se configura tal que así:
<Menu>
<Name>Xfce</Name>
<DefaultAppDirs/>
<DefaultDirectoryDirs/>
<Include>
<Category>X-Xfce-Toplevel</Category>
</Include>
<Layout>
<Menuname>Directorios</Menuname>
<Separator/>
<Filename>xfce4-run-program.desktop</Filename>
<Separator/>
<Filename>gksuusrbinx-terminal-emulator.desktop</Filename>
<Filename>xfce4-terminal.desktop</Filename>
<Filename>thunar.desktop</Filename>
<Menuname>Accesorios</Menuname>
<Separator/>
<Filename>iceweasel.desktop</Filename>
<Separator/>
<Filename>xfce4-about-xfce.desktop</Filename>
<Filename>xfce4-logout.desktop</Filename>
</Layout>
<Menu>
<Name>Directorios</Name>
<DefaultAppDirs/>
<DefaultDirectoryDirs/>
<Include>
<Category>X-Xfce-Toplevel</Category>
</Include>
<Layout>
<Filename>thunarhomeihsan.desktop</Filename>
<Filename>thunarmediaAlpha.desktop</Filename>
</Layout>
</Menu>
<Menu>
<Name>Accesorios</Name>
<DefaultAppDirs/>
<DefaultDirectoryDirs/>
<Include>
<Category>X-Xfce-Toplevel</Category>
</Include>
<Layout>
<Filename>xfce4-appfinder.desktop</Filename>
<Filename>catfish.desktop</Filename>
</Layout>
</Menu>
</Menu>
Lo que hay dentro del primer tag "<Layout>" es lo que se verá nada más hagamos clic en él. Lo que hay entre los tags "<Filename>" es lo que hará que aparezcan las aplicaciones (el archivo "links" nos mostrará todos los <Filename>nombre_del_archivo<Filename> de nuestro anterior menú). También podemos crear carpetas con "<Menuname>" (ojo! estas se crean fuera del "<Layout>" y deben de tener el mismo nombre). En el wiki de Xfce tenéis más información sobre esto.
Y bueno, eso es todo (un poco tocho y complicado para lo que en realidad es >_<). Lo que me extraña es que no funcionará directamente con los enlaces (archivos *.desktop) de "/usr/share/applications" (que igual sí que funciona y te ahorras unos pasos, pero tenía problemas a la hora de "refrescar" el menú cada vez que cambiaba algo y no funcionaba nada ._.").
También puedes usarlo para crear tu propio menú desde 0, creando un archivo nuevo en la carpeta de "
a", otorgándole permisos de ejecución y añadiendo en su interior:
./a "nombre del programa" "comando de ejecución del mismo" "ruta al icono"
./a "nombre de un 2º programa" "comando de ejecuión" "ruta del icono"
./a ...
Siento que haya salido tan grande el post, y espero que llegue a ayudar a alguien
(ojalá hubiera tenido algo así a mano cuando he visto que tras actualizar mi menú personalizado salía vacío xD).
Saludos!
PD: Los archivos bash son bastante mejorables, pero principalmente eran para uso personal y, al fin y al cabo, esto no es más que una bitácora del proceso que he llevado a cabo para guiar a otros xD
PD2: Según estaba leyendo, el comando "sed" no es más que una copia de algunos comandos de Perl. Quizá en Perl se pueda lograr un script mejor, pero tampoco veo necesario calentarse más la cabeza por una "tonteria" como ésta que solo sirve para portar un menú xD