Fluxcripts, controlando fluxbox desde PHP
LibFluxcripts es una biblioteca de funciones en PHP para controlar el entorno gráfico fluxbox. Son funciones básicas para leer y modificar escritorios y ventanas desde scripts en PHP invocados mediante el teclado o bien ejecutándose en segundo plano.
A modo de ejemplo se incluye un script para atraer al escritorio actual todas las ventanas que coincidan con un texto introducido por el usuario
Dependencias
Si estamos haciendo todo esto es porque probablemente somos usuarios de fluxbox y lo tenemos instalado, si no, en Ubuntu:
sudo aptitude install fluxbox
Los scripts están en PHP, así que obviamente nos hará falta tener este lenguaje de scripting instalado. En ubuntu:
sudo aptitude install php5-cli
LibFluxcripts requiere el programa wmctrl, disponible en los repositorios de muchas distribuciones. En Ubuntu:
sudo aptitude install wmctrl
Adicionalmente, si queremos usar los diálogos gráficos de usuario, podemos instalar zenity, un generador de diálogos para ser llamado desde la consola. En ubuntu:
sudo aptitude install zenity
Ejemplo simple, mover ventanas al escritorio actual
Este script de ejemplo, esta pensado para ser lanzado mediante una pulsación de tecla (yo uso WinKey+M), al ejecutarse nos permite introducir un texto, al pulsar OK o presionar retorno, el script moverá al escritorio actual todas las ventanas que contengan en su nombre de ventana o nombre de aplicación el texto introducido.
<?php
require 'fluxbox.inc.php';
$text=zenityAsk("Search?");
$windows=getAllWindows();
if( !empty($text) ){
foreach ( $windows as $window ){
if( strpos($window[app_name],$text) !== false ||
strpos($window[name],$text) !==false ){
windowMoveToDesktop($window[id],getCurrentDesktopId());
}
}
}
?>
Para ejecutar ejecutar este script yo lo he añadido a la combinación de teclas (win+m), para ello añadiriamos la siguiente linea al fichero ~/.fluxbox/keys
Mod4 m :ExecCommand /usr/bin/php /home/usuario/.fluxbox/fluxcripts/movehere.php
Nota: El espacio entre la 'm' y los ':' es obligatorio,
Otro ejemplo, diferentes fondos para cada escritorio en fluxbox
Este script debe ser llamado al iniciarse fluxbox, se ejecuta en segundo plano y cada medio segundo comprueba cual es el escritorio actual seleccionado.
Para cada escritorio disponemos de un directorio de imágenes, el script tomara una imagen aleatoria dentro de las disponibles para ese escritorio y la pondrá de fondo. Así, podemos tener diferente temáticas de fondo para cada escritorio, por ejemplo, solo fondos de naturaleza para el escritorio uno, fondos de color rojo para el escritorio dos, fondos urbanos para el tres, ....
Obviamente nada nos impide dejar solo una imagen en el directorio para que ese escritorio siempre tenga la misma imagen.
Las imágenes se encuentran en ~fluxbox/fluxcripts/wallpapers_rand/NUMESCRITORIO/
<?php
require 'fluxbox.inc.php';
// initial whait
sleep(4);
chdir(dirname(__FILE__));
$last_desktop=999;
while(1){
$current_desktop_id = getCurrentDesktopId();
if( $current_desktop_id != $last_desktop ){
// Load possible wallpapers
$files=glob("./wallpapers_rand/".($current_desktop_id+1)."/*");
/* Wallpaper at random, change frecuency */
//srand(ceil(time()/60/60/24)); // Every day change (unix_day)
//srand(ceil(time()/60/60/24/7)); // Every week
// Set and remember wallpaper
$r=rand(0,count($files)-1);
setCurrentDesktopWallpaper($files[$r]);
$last_desktop = $current_desktop_id;
// whait time
sleep(0.5);
}
}
?>
Este script lo podemos ejecutar al iniciar fluxbox añadiendo la siguiente linea al fichero ~/.fluxbox/startup
/usr/bin/php /home/srfosc/.fluxbox/fluxcripts/wallpainter.php &
Nota: El símbolo & al final de la linea ES necesario, de lo contrario, fluxbox esperará a que el script termine de ejecutarse para iniciarse, y eso no ocurrirá nunca.
Descargar y instalar 0.1beta
user@host# cd ~/.fluxbox/
user@host# wget http://nidodecuervos.comentalo.net/fluxcripts.current.tar.gz
user@host# tar -zxvf fluxcripts.current.tar.gz
En los dos ejemplos anteriores, se explica como activar los ejemplos incluidos en el tar.
Hacer nuestros scripts
Podemos hacer nuestros propios scripts a nuestro gusto si sabemos programar en PHP, si alguien echa de menos alguna funcionalidad no incluida en las funciones disponibles, que deje nota en los comentarios y intentaré añadirla.
- desktopFocusNext()
- desktopFocus($desktop_id)
- getAllDesktops()
- zenityAsk($txt)
- zenityShowMessage($txt)
- getCurrentDesktopId()
- getProcessNameByPid($pid)
- getAllWindows()
- Retorna un array de ventanas, cada ventana contiene:
- $ventana['id'] : El identificador de ventana, una cadena alfanumérica.
- $ventana['desktop'] : El identificador escritorio donde se encuentra la ventana.
- $ventana['pid'] : El identificador de proceso de la ventana.
- $ventana['x'] : La posición X de la ventana.
- $ventana['y'] : La posición Y de la ventana.
- $ventana['w'] : Ancho de la ventana en pixels.
- $ventana['h'] : Alto de la ventana en pixels.
- $ventana['host'] : La maquina donde se ejecuta la ventana.
- $ventana['name'] : Nombre de la ventana.
- $ventana['app_name'] : Nombre de la aplicación. (Por ejemplo: aterm, firefox, dolphin)
- windowFocus( $window_id )
- windowMoveToDesktop( $window_id, $desktop_id )
- setCurrentDesktopWallpaper($image_file)
Si has creado algún script útil con esto, no dudes en enviárnoslo a admin[garrofa]comentalo.net y lo publicaremos.
Bugs
Imposible, eso es que algo hiciste mal ;)
Aún así, si encontraste algún problema, email a: admin[garrofa]comentalo.net