10 octubre 2008

Firefox y pagina atrás

No se si éste os interesará mucho, o no, pero en firefox por muchas veces que pulsara la tecla del (<-- , backspace , etc...), firefox no volvía a la página anterior.

Para "solucionar" esto, accedemos a la dirección about:config (teniendo cuidado xDD), y buscamos el valor de browser.backspace_action, lo ponemos a 0, y nuestro del de toda la vida vuelve a la página anterior, con Shitf + Del, pagina siguiente, si ese valor lo ponemos a 1 haremos up_scrolling en la página, con Shift + Del down_scrolling, con cualquier otro valor, no realiza ninguna acción.

Fuente

05 septiembre 2008

Automontaje (beta)

Scottiepipas tuvo la inquietud de como hacer automontaje de usb extraibles en slackware, y dedujo que con reglas udev podría hacerse, y funcionaba a la perfección, creaba la carpeta y montaba el dispositivo, pero no creaba el link en el escritorio, pero bueno, como ya hace todo lo que tiene que hacer ahi va toda la info:

Los 3 primeros scripts vienen directamente de Zenwalk, el ultimo con 2 modificaciones, el ultimo es de cosecha propia.

Modificamos /etc/udev/udev.conf

# udev.conf
# The main config file for udev
#
# This file can be used to override some of udev's default values
# for where it looks for files, and where it places device nodes.


# udev_root - where in the filesystem to place the device nodes
udev_root="/dev/"

# udev_db - The name and location of the udev database.
udev_db="/dev/.udev.tdb"

# udev_rules - The name and location of the udev rules dir
udev_rules="/etc/udev/rules.d"

# default_mode - set the default mode for all nodes that have no
# explicit match in the permissions file
default_mode="666"

# default_owner - set the default owner for all nodes that have no
# explicit match in the permissions file
default_owner="root"

# default_group - set the default group for all nodes that have no
# explicit match in the permissions file
default_group="root"

# udev_log - set to "yes" if you want logging, else "no"
udev_log="no"

Creamos /etc/udev/rules.d/20-hotmount.rules

# USB storage devices
KERNEL=="sd*|sr*|ub*", ACTION=="add", SUBSYSTEMS=="usb", ENV{DEVFLAG}="usbdisk", NAME="%k", GROUP="cdrom", MODE="0660", RUN+="/lib/udev/usbmount.sh add /dev/%k"
KERNEL=="sd*|sr*|ub*", ACTION=="remove", ENV{DEVFLAG}=="usbdisk", RUN+="/lib/udev/usbmount.sh remove /dev/%k"


Creamos /lib/udev/usbmount.sh
#!/bin/sh
# This script mounts USB and other mass storage devices when they are plugged in
# and unmounts them when they are removed.
# It also creates mountpoints as needed, and removes them afterward
# Copyright (C) 2006 Jean-Philippe Guillemin and Mark Colclough
#
# This file is free software; the copyright holder gives unlimited
# permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
#

# Usage : [hotmount.sh|usbmount.sh|firemount.sh|pcmciamount.sh] (add|remove) DEVICE [MOUNTPOINT]
# if the variable $NICEMOUNTPOINT is defined it will be used as the first tried mountpoint

# version 1.0 11/06/2006

VERBOSE="no"

# Log a string via the syslog facility.
log()
{
[ "$VERBOSE" = "yes" ] && logger -p user.$1 -t "usbmount[$$]" -- "$2"
}


# Test if the first parameter is in the list given by the second
# parameter.
in_list()
{
for v in $2; do
test "$1" != "$v" || return 0
done
return 1
}

# Test if /lib/udev/vol_id is executable.
test -x /lib/udev/vol_id || { log err "cannnot execute /lib/udev/vol_id"; exit 1; }

# Default mountpoints depend on how we were called
case "${0##*/}" in
firemount.sh)
MOUNTPOINTS="/mnt/fire /mnt/fire1 /mnt/fire2 /mnt/fire3 /mnt/fire4 /mnt/fire5 /mnt/fire6 /mnt/fire7 /mnt/fire8 /mnt/fire9 /mnt/fire10 /mnt/fire11"
;;
pcmciamount.sh)
MOUNTPOINTS="/mnt/pcm /mnt/pcm1 /mnt/pcm2 /mnt/pcm3 /mnt/pcm4 /mnt/pcm5 /mnt/pcm6 /mnt/pcm7 /mnt/pcm8 /mnt/pcm9 /mnt/pcm10 /mnt/pcm11"
;;
mmcmount.sh)
MOUNTPOINTS="/mnt/mmc /mnt/mmc1 /mnt/mmc2 /mnt/mmc3 /mnt/mmc4 /mnt/mmc5 /mnt/mmc6 /mnt/mmc7 /mnt/mmc8 /mnt/mmc9 /mnt/mmc10 /mnt/mmc11"
;;
*)
MOUNTPOINTS="/mnt/usb /mnt/usb1 /mnt/usb2 /mnt/usb3 /mnt/usb4 /mnt/usb5 /mnt/usb6 /mnt/usb7 /mnt/usb8 /mnt/usb9 /mnt/usb10 /mnt/usb11"
;;
esac
MOUNTOPTIONS=" noauto,user,rw,owner,exec"

# The device name MUST be given as 2nd argument
DEVNAME="$2"

# Maybe a user-defined mountpoint in fstab ?
FSTABMOUNTPOINT="$(grep "$DEVNAME[[:space:]]" /etc/fstab | awk '{print $2}' | tail -n1)"
[ "$FSTABMOUNTPOINT" ] && MOUNTPOINTS="$FSTABMOUNTPOINT $MOUNTPOINTS"
FSTABMOUNTOPTIONS="$(grep "$DEVNAME[[:space:]]" /etc/fstab | awk '{print $4}' | tail -n1)"

# The mount point COULD be given as 3rd argument
[ "$3" ] && MOUNTPOINTS="$3 $MOUNTPOINTS"

# if the variable $NICEMOUNTPOINT is defined it will be used as the first tried mountpoint
[ "$NICEMOUNTPOINT" ] && MOUNTPOINTS="$NICEMOUNTPOINT $MOUNTPOINTS"

umask 000

if [ "$1" = add ] ; then

log info "devname == $DEVNAME !!"
# Try to read from the device. Some devices need a few seconds
# initialization time before they can be accessed. Give up after
# 20 seconds (a Markish infinite... ;).
log info "testing whether $DEVNAME is readable"
read_success=no
for t in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do
dd if="$DEVNAME" of=/dev/null bs=512 count=1
if [ "$?" = "0" ] ; then
read_success=yes
break
fi
log info "attempt $t to read from $DEVNAME failed"
sleep 1
done
if [ "$read_success" != "yes" ]; then
log err "cannot read from $DEVNAME"
exit 1
fi

# Test if the device contains a filesystem.
/lib/udev/vol_id "$DEVNAME" | egrep -q '^ID_FS_USAGE=(filesystem|disklabel)$'
if [ "$?" = "0" ] ; then
log info "$DEVNAME contains a filesystem or disklabel"

fstype="$(/lib/udev/vol_id -t $DEVNAME )"
log info "$DEVNAME contains filesystem type $fstype"

# We search for available mountpoint in the list
for mountpoint in $MOUNTPOINTS; do

# Get a lock for the mountpoint under consideration
for t in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do
(set -C; echo "$$" > /var/lock/${mountpoint##*/}) && break
log info "waiting for $mountpoint lockfile to be released"
sleep 1
done

if [ -d "$mountpoint" ]; then
log info "mountpoint $mountpoint exists"
if [ ! "$( mount | awk '{print $3}' | grep "$mountpoint" )" ]; then
log info "mountpoint $mountpoint is available for $DEVNAME"
break
else
log info "mountpoint $mountpoint is busy"
rm -f /var/lock/${mountpoint##*/}
continue
fi
else
log info "creating mountpoint $mountpoint for $DEVNAME"
mkdir -p -m0 $mountpoint
umount -l "$mountpoint"
log info "mountpoint $mountpoint is available for $DEVNAME"
break
fi
rm -f /var/lock/${mountpoint##*/}
done

if [ "$mountpoint" ] ; then

# Determine mount options.
options=""
if [ "$FSTABMOUNTOPTIONS" ]; then
options="$FSTABMOUNTOPTIONS"
else
[ "$MOUNTOPTIONS" ] && options="$MOUNTOPTIONS"
[ ! "$fstype" = "vfat" ] && options="${options},sync,dirsync"
[ "$fstype" = "vfat" ] && options="${options},uid=0,gid=100,umask=0"
fi

# Mount the filesystem.
for t in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do
[ "$( mount | awk '{print $1}' | grep "$DEVNAME" )" ] && break
log info "executing command: mount -t $fstype -o $options $DEVNAME $mountpoint"
eval "mount -t $fstype -o $options $DEVNAME $mountpoint"
/lib/udev/montaje.sh $DEVNAME $mountpoint
done
rm -f /var/lock/${mountpoint##*/}
else
# No suitable mount point found.
log warning "no mountpoint found for $DEVNAME"
exit 1
fi
else
log info "$DEVNAME does not contain a filesystem or disklabel"
fi

elif [ "$1" = remove ] ; then
/lib/udev/montaje.sh $DEVNAME $DEVNAME $1
# A block or partition device has been removed.
# Test if it is mounted.
while read device mountpoint fstype remainder; do
if [ "$DEVNAME" = "$device" ] ; then
# If the mountpoint and filesystem type are maintained by
# this script, unmount the filesystem.
if in_list "$mountpoint" "$MOUNTPOINTS" ; then
log info "unmounting $mountpoint"
umount -l "$mountpoint"
rmdir $mountpoint && break
log info "cannot remove $mountpoint, maybe not empty"
fi
break
fi
done < /proc/mounts fi exit 0


Por último creamos /lib/udev/montaje.sh

#!/bin/bash
#*******************************************
# Llamado desde usbmount.sh
# /lib/udev/montaje.sh $DEVNAME $mountpoint [remove]
#
# v 0.3

nombre=`echo $2 | cut -c 6,7,8,9`
usuario=`w | grep k | cut -f 1 -d ' '`

if [ $usuario == "root" ] ; then
export HOME=/root
else
export HOME=/home/$usuario
fi


if [ "$3" != remove ]
then
echo " [Desktop Entry]
Type=FSDevice
Dev=$1
MountPoint=$2
Encoding=UTF-8
Icon=usbpendrive_mount
UnmountIcon=usbpendrive_unmount
Comment=$ID_SERIAL $ID_FS_TYPE
Name=$nombre ($ID_FS_LABEL)" > $HOME/Desktop/$nombre.desktop
echo "$1 $2 vfat users" >> /etc/fstab

############
#Popup en KDE (test)

export DISPLAY=":0"
export XAUTHORITY=$HOME/.Xauthority
/usr/bin/xhost + local:$usuario
/usr/bin/kdialog --title "Montado: $ID_MODEL [$ID_VENDOR]" --passivepopup " Etiqueta: $ID_FS_LABEL
Sistema de ficheros: $ID_FS_TYPE
Punto de montaje: $2
Dispositivo: $1" 7 --geometry 10x10-0-0
/usr/bin/xhost - local:$usuario
###########

else
borra=`cat /etc/fstab | grep $2 | cut -f 2 -d ' '`
cat /etc/fstab | grep $2 -v > /etc/fstab
rmdir $borra
dis=`echo $borra | cut -d / -f 3 | cut -d ' ' -f 1`
rm $HOME/Desktop/$dis.desktop
fi



y con esto lo que conseguimos es que al pinchar nuestra memoria usb aparezca en nuestro escritorio un link a ella, con opcion de desmontarla con un par de clicks, al quitar nuestro usb el link desaparece.

No olvidar dar permiso de ejecucion a los scripts

chmod +x script


Empaquetado aqui v0.4. Recomiendo hacer una copia de seguridad de /etc/udev/udev.conf, ya que es el unico que se sobreescribe, y después darle permiso de ejecución a los ficheros.

25 mayo 2008

Portable VNC PSP + Slack

Portable vnc es un homebrew que permite contralar el pc con la psp, controlando desde la portatil otra instancia del escritorio.

Descargamos el hombrew:
Portable VNC 3.xx
Portable VNC 1.50

y el paquete TightVNC para nuestra slack:
tight VNC

Instalamos el homebrew en la psp como de costumbre en:
PSP/GAME (3.xx)
PSP/GAME150 (1.50)

Instalamos el paquete en slack y arrancamos el vncserver:

$> installpkg tightvnc-1.3.9-i486-2hrk.tgz
$> vncserver
Introducimos la contraseña, la validamos y elegimos si queremos una contraseña para solo lectura.

Obtendremos algo como esto:


Arrancamos en la portatil el programa, nos conectamos a una red wifi, y procedemos a añadir un nuevo host.
Introducimos la IP, y el puerto: xxx.xxx.xxx.xxx:590x
590x (para conexiones VNC)
580x (para conexiones HTTP)

Seleccionamos un nombre, y el S.O. (Linux :P)

Establecemos la conexion y nos pedirá la contraseña, la introducimos, et voilá.

15 mayo 2008

Apunte sobre la virtualización

Con VirtualBox 1.6, todavía persiste el problema de la disposición del teclado, esperemos que se arregle en proximas versiones, y que se aumente la compatibilidad con usb 2.0.

Vmware Workstation 6, por mi reciente experiencia ganá por la compatibilidad usb 2.0 (en especial para mi webcam), el teclado funciona correctamente, pero no tiene un Seamless mode tan sencillo de implementar como VB. Para hacerlo tenemos que conectarnos a partir de escritorio remoto.

Para gustos colores, me quedo con vmware casi por obligación, porque personalmente prefiero VirtualBox.

Ampliaré más datos con la experiencia de estos días.

13 febrero 2008

Bug Kernel 2.6.17 a 2.6.24 vmsplice

Supongo que todos los que pasais por aquí visitais también Open-Eslack, pero como nunca está de más avisar sobre estos asuntos os informamos sobre una vulnerabilidad en los kernel de la serie 2.6 (de 6.17 a 6.24.1).

El bug permite a un usuario local sin privilegios escalar hasta convertirse en root.




El exploit se aprovecha de un fallo en la llamada al sistema vmsplice(), por que omite un par de validaciones de permisos. +info

Kernels no afectados: 2.6.22.8 o 2.6.23.16 o 2.6.24.2

La soluciónes que tenemos q adoptar serían:
- Parchear nuestro kernel. [Probado]
- Actualizar a uno no afectado. [Probado]
- Compilar el kernel sin soporte vmsplice. [No probado]
- Ejecutar el módulo novmsplice, para desabilitar las llamadas al sistema vmsplice. [No probado]

29 enero 2008

Instalando kde 3.5.8

Descargamos los siguientes paquetes:


Salimos del kde si estuviesemos ahí:

Menu K -> Temirnar -> Terminar sesion #Recomiendo además salir a una terminal tty1, por ejemplo, Ctrl + Alt + F1
telinit 3 #Descargamos el servidor X (por si las moscas)

Vía 1: borramos los paquetes de versiones anteriores:

cd /var/log/packages
removepkg xxxxx#usamos autocompletar para que la tarea nos resulte mas comoda


Podemos además borrar la antigua configuración del kde

rm -rf $HOME/.kde

Y finalmente instalamos los paquetes descargados, podemos reiniciar el equipo antes de instalar (metodo: scottie), o instalar directamente (metodo: aks), los dos metodos tuvieron un final feliz:

(reboot)
installpkg *.tgz #así si nos situamos desde la carpeta que los contenga


Vía 2: Desde la carpeta que contiene los tgz del kde 3.5.8 actualizamos directamente los paquetes.

upgradepkg *.tgz #testeado por washap :·O

Tras la instalación:

telinit 4 o startx

y a disfrutar del kde 3.5.8
Paquetes descargado de:
Belnet.be
Slacky.eu

Compilando tu propio Kernel serie 2.6

Compilar nuestro propio kernel nos puede traer bastantes ventajas, y no es necesario esperar a que aparezca una versión precompilada.

Procedo al mini-howto partiendo de la configuración de nuestro kernel previo, siempre podemos configurarlo a nuestro gusto y a nuestras necesidades pero no es el cometido de este manual.

Descargamos el codigo completo de la versión del kernel a compilar, en este caso 2.6.24, y lo descomprimimos.

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2
tar xvf linux-2.6.24.tar.bz2


Pasamos nuestra la carpeta del codigo fuente del kernel a /usr/src

mv linux-2.6.24 /usr/src/linux-2.6.24

Vamos hasta el directorio y copiamos la configuración de nuestro kernel previo (2.6.23.8 en mi caso)

cd /usr/src
cp linux-2.6.23.8/.config /usr/src/linux-2.6.24
cd linux-2.6.24


Ahora podemos comprobar los modulos que se cargarán en el kernel, y marcar o desmarcar los que se nos antoje mediante make menuconfig o make xconfig.

y despues compilamos el código e instalamos los modulos

make && make modules && make modules_install

Copiamos la imagen del kernel a nuestro directorio /boot y preparamos una nueva entrada en el lilo.conf para arrancar con él.

cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.24

Añadimos al /etc/lilo.conf

image = /boot/vmlinuz-2.6.24
root = /dev/sda2 #La particion que corresponda
label = 2.6.24
read-only

Reescribimos el mbr

/sbin/lilo -v

Y al reiniciar tendremos disponible nuestra nueva entrada para cargar el nuevo kernel.

13 enero 2008

Kde 4.0.0 en slackware 12 + upgrade 4.0.1

Bajamos de esta página:

http://www.mytux.org/content/viewslackpackage.php

Los siguientes paquetes:

extragear-plasma-4.0.0-i486-1mg.tgz
capseo-0108svn-i486-1mg.tgz
kdeadmin-4.0.0-i486-1mg.tgz
kdeartwork-4.0.0-i486-1mg.tgz
kdebase-4.0.0-i486-2mg.tgz
kdegames-4.0.0-i486-1mg.tgz
kdegraphics-4.0.0-i486-1mg.tgz
kdelibs-4.0.0-i486-1mg.tgz
kdemultimedia-4.0.0-i486-1mg.tgz
kdenetwork-4.0.0-i486-1mg.tgz
kdepim-4.0.0svn-i486-1mg.tgz
kdepimlibs-4.0.0-i486-1mg.tgz
kdesdk-4.0.0-i486-1mg.tgz
kdeutils-4.0.0-i486-1mg.tgz
kdewebdev-4.0.0-i486-1mg.tgz
libcaptury-0108svn-i486-1mg.tgz
qimageblitz-0108svn-i486-1mg.tgz
strigi-0108svn-i486-1mg.tgz
tapioca-qt-0.14.1-i486-2mg.tgz
telepathy-qt-0.14.1-i486-1mg.tgz
libiconv-1.12-i486-1as.tgz
qt4-4.3.3-i686-1as.tgz
pyqt4-4.3.3-i486-1as.tgz
sip-4.7.3-i486-1as.tgz
postgresql-8.2.6-i486-1sl.tgz
unixodbc-2.2.12-i486-1sl.tgz
sqlite-3.5.4-i486-1sl.tgz
kdebase-runtime-4.0.0-i486-1mg.tgz
kdebase-workspace-4.0.0-i486-1mg.tgz
soprano-0801svn-i486-1mg.tgz
decibel-0108svn-i486-1mg.tgz

Los instalais y ahora toca configurar las qt para que no de problemas al arrancar kde 4.0.
El script funciona de la siguiente forma:

./nombrescript.sh [qt3qt4]

Dependiendo de las qt que nos interese tener, en este caso qt4, porque sino tendremos problemas al iniciarlo.

Creais un script con el siguiente contenido:

#!/bin/sh
#very simple script for switch qt version

qt3()
{
sudo rm /usr/lib/qt
sudo ln -s /usr/lib/qt-3.3.8 /usr/lib/qt
sudo rm /usr/bin/qmake
sudo ln -s /usr/lib/qt/bin/qmake /usr/bin/qmake
echo "Now use qt3"
}

qt4()
{
sudo rm /usr/lib/qt
sudo ln -s /opt/qt4 /usr/lib/qt
sudo rm /usr/bin/qmake
sudo ln -s /opt/qt4/bin/qmake /usr/bin/qmake
echo "Now use qt4"
}

case "$1" in
'qt3')
qt3
;;
'qt4')
qt4
;;
*)
echo "usage $0 qt3qt4"
esac

Y con esto es suficiente para que cuando vayais a kdm y selecioneis kde4 arranque con normalidad.

Información sacada de: http://www.mytux.org/ y de su foro, slacky.eu y aportes de eslackeros como dhabyx.

==
Actualización a KDE 4.0.1

Descargamos los siguientes paquetes:

KdeLibs
Qimageblitz
Strigi
Kdebase
KdeGames
KdeGraphics
KdeUtils
KdeNetwork
KdeMultimedia
Extragear-Plasma
KdeWebdev
KdeAdmin
KdePimLibs
Soprano
KdeAccesibility
KdeToys

$ upgradepkg *.tgz #aún sin probar

11 enero 2008

Control vía Bluetooth de Amarok (Remuco)

Hace tiempo me planteé la posibilidad de manejar el equipo vía Bluetooth con el movil, y me lo propuse como proyecto a medio plazo, y hace poco encontré un programa remuco, que permite controlar el Amarok (Rhythmbox/Xmms) vía Bluetooth, y aquí adjunto un pequeño tutorial.

Requisitos iniciales:
- Bluetooth funcional en el equipo. (Actualizaré pronto el howto para Slack 12.0).
- Movil con soporte Java.

Descargamos el remuco-client e instalamos una de las distintas versiones en el teléfono. (Diferencias entre las versiones)

Descargamos el remuco-sever, (dependiendo del programa a controlar bajaraemos uno u otro), en nuestro caso bajaremos remuco-server-amarok-0.4.3.1.tar.gz.

$> tar xfvz remuco-server-amarok-0.4.3.1.tar.gz
$> cd remuco-server-amarok-0.4.3.1
$> make install
ejecutamos
$> remuco-amarok
Iniciamos el Remuco cliente en el movil y ya podemos controlar nuestro reproductor de música vía bluetooth.