martes, 16 de junio de 2020

Actualizar Debian Linux con una sola orden

Con el siguiente comando se actualizan todos los paquetes y se eliminan de datos de paquetes eliminados previamente:

aptitude update && aptitude upgrade && aptitude purge '~c' && dpkg -l | grep -v "^ii"

Bibliografía:

https://geekytheory.com/actualiza-y-limpia-tu-linux-con-una-sola-orden

Convertir ficheros PDF a JPG con ImageMagick

Con el siguiente comando se puede convertir un fichero PDF a imagen.
Si el fichero tiene varias páginas se generarán varios ficheros JPF, uno por cada página.
También tiene en cuenta si la imagen del PDF tiene transparencias, dejándolas en blanco en los ficheros JPG resultantes.

El comando a ejecutar sería el siguiente:

convert -density 300 fichero_entrada.pdf -background white -alpha remove fichero_salida_%02d.jpg

Otra opción sería la siguiente:

gs -dNOPAUSE -sDEVICE=jpeg -dJPEGQ=90 -r600 -dBATCH -sOutputFile=fichero_salida_%02d.jpg fichero_entrada.pdf

Bibliografía:

https://stackoverflow.com/questions/2322750/replace-transparency-in-png-images-with-white-background https://superuser.com/questions/1469592/how-can-i-convert-a-pdf-into-a-series-of-images-jpgs-or-pngs-via-the-terminal

domingo, 3 de febrero de 2019

Creación de un disco USB para la instalacción de Debian GNU / Linux en un portatil MacBook 2,1 de 2006

Los pasos para la creación del disco USB están basados en la información encontrada en el siguiente enlace:

Installing Debian Jessie on a "pure UEFI" system

Y son los siguientes:

root@miequipo:~# fdisk /dev/sdb

Orden (m para obtener ayuda): n
Número de partición (1-128, valor predeterminado 1):
Primer sector (34-1986526, valor predeterminado 2048):
Último sector, +sectores o +tamaño{K,M,G,T,P} (2048-1986526, valor predeterminado 1986526): +100M

Crea una nueva partición 1 de tipo 'Linux filesystem' y de tamaño 100 MiB.

Orden (m para obtener ayuda): t
Se ha seleccionado la partición 1
Tipo de partición (teclee L para ver todos los tipos): 1
Se ha cambiado el tipo de la partición 'Linux filesystem' a 'EFI System'.

Orden (m para obtener ayuda): p
Disco /dev/sdb: 970 MiB, 1017118720 bytes, 1986560 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: gpt
Identificador del disco: CCE5296A-D7FD-4271-B116-45E811B635ED

Device     Start    End Sectors  Size Type
/dev/sdb1   2048 206847  204800  100M EFI System


Orden (m para obtener ayuda): w
Se ha modificado la tabla de particiones.
Llamando a ioctl() para volver a leer la tabla de particiones.
Se están sincronizando los discos.

root@miepia:~# mkfs.fat /dev/sdb1 
mkfs.fat 3.0.27 (2014-11-12)
root@miepia:~# fdisk -l       

Disco /dev/sdb: 970 MiB, 1017118720 bytes, 1986560 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: gpt
Identificador del disco: CCE5296A-D7FD-4271-B116-45E811B635ED

Device     Start    End Sectors  Size Type
/dev/sdb1   2048 206847  204800  100M EFI System

root@miequipo:~# pmount sdb1
root@miequipo:~# mkdir /media/sdb1/EFI/debian
root@miequipo:~# wget -O /media/sdb1/EFI/debian/linux http://ftp.fr.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
--2019-02-03 21:15:55--  http://ftp.fr.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
Resolviendo ftp.fr.debian.org (ftp.fr.debian.org)... 212.27.32.66, 2a01:e0c:1:1598::2
Conectando con ftp.fr.debian.org (ftp.fr.debian.org)[212.27.32.66]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 4232992 (4,0M)
Grabando a: “/media/sdb1/EFI/debian/linux”

/media/sdb1/EFI/debian/linux                 100%[================================================================================================>]   4,04M  4,81MB/s   en 0,8s   

2019-02-03 21:15:56 (4,81 MB/s) - “/media/sdb1/EFI/debian/linux” guardado [4232992/4232992]
root@miequipo:~# wget -O /media/sdb1/EFI/debian/initrd.gz http://ftp.fr.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
--2019-02-03 21:17:24--  http://ftp.fr.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
Resolviendo ftp.fr.debian.org (ftp.fr.debian.org)... 212.27.32.66, 2a01:e0c:1:1598::2
Conectando con ftp.fr.debian.org (ftp.fr.debian.org)[212.27.32.66]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 24774665 (24M) [application/x-gzip]
Grabando a: “/media/sdb1/EFI/debian/initrd.gz”

/media/sdb1/EFI/debian/initrd.gz             100%[================================================================================================>]  23,63M  6,15MB/s   en 4,2s   

2019-02-03 21:17:29 (5,67 MB/s) - “/media/sdb1/EFI/debian/initrd.gz” guardado [24774665/24774665]
root@miequipo:~# cat << EOF > /media/sdb1/boot/grub/grub.cfg
menuentry "Jessie Installer" {
insmod part_msdos
insmod ext2
insmod part_gpt
insmod fat
insmod gzio
echo  'Loading Linux kernel'
linux /EFI/debian/linux --- console=ttyS0,115200
echo 'Loading InitRD'
initrd /EFI/debian/initrd.gz
}
EOF
Y estaría creado el disco con el que podremos arrancar la instalación.

viernes, 14 de febrero de 2014

Configuración Mando a Distancia en Debian GNU / Linux



Después de actualizar mi media center a Debian Wheezy, lo único que me ha dado problemas es el mando a distancia. De repente parece que solo funcionan algunas teclas :-(

Después de investigar, parece que a partir de la versión 2.6.32 del kernel, han incluido los mandos a distancia para que se detecten como un dispositivo de entrada cualquiera. Con lo que sin ninguna configuración adicional funcionan como si fueran un teclado.

A primera vista esto puede estar muy bien, pero a mi me interesa seguir usando Lirc, ya que me permite hacer la correspondencia de teclas del mando a distancia de forma más personalizada, según el programa que esté usando. Además, como he dicho antes, parece ser que este mando no tiene mapeadas correctamente todas las teclas, y necesitaría realizar cierta configuración con el comando "ir-keytable".

A continuación, a modo de referencia, pongo los pasos a seguir para configurar un mando a distancia desde cero. El mando a distancia a configurar es el modelo "RM-FP" de Avermedia:
Aunque con un poco de trampa, porque lo que utilizo es un mando a distancia universal, programado para que pueda controlar la televisión y el media center.
El mando a distancia universal que uso es el modelo "Essence 4 (URC-7140)" de One For All:
Este mando universal permite copiar los códigos que envía el mando original mediante su función de aprendizaje. Con lo que, aunque no era compatible con el mando de Avermedia, he podido grabar el código de cada tecla, y así sustituirlo con el mando universal.

El primer paso es configurar el fichero "/etc/lirc/hardware.conf". Para ello se debe buscar en que dispositivo se ha referencia el mando a distancia. Para ello ejecutamos el siguiente comando:

cat /proc/bus/input/devices

Ahora podemos buscar el dispositivo dentro del directorio "/dev/input". En mi caso el fichero de configuración queda como sigue:

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS=""

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="devinput"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/input/by-path/pci-0000:00:04.1-usb-0:6-event-ir"
MODULES=""

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Para crear el fichero "lircd.conf" para nuestro mando a distancia copiamos el fichero de configuración genérico y reiniciamos el servicio, con el siguiente comando:

cp /usr/share/lirc/remotes/devinput/lircd.conf.devinput /etc/lirc/lircd.conf
/etc/init.d/lirc restart

Ahora, con el siguiente comando se deberían poder ver los códigos que genera el mando a distancia con cada tecla:

irw

Es posible que algunas teclas no muestren ningún código. Aquí es donde entra en juego el comando "ir-keytable". Al ejecutarlo nos debería mostrar la información del mando a distancia. Por ejemplo:

Found /sys/class/rc/rc0/ (/dev/input/event3) with:
    Driver af9015, table rc-avermedia-m135a
    Supported protocols: NEC
    Enabled protocols: NEC
    Repeat delay = 500 ms, repeat period = 125 ms

Con estos datos, podemos usar este mismo comando para ver los códigos que genera cada botón del mando a distancia, al estilo del comando "irw", pero con la diferencia que debería mostrar el código de todas las teclas que pulsemos. Debemos ejecutar lo siguiente:

ir-keytable -s rc0 -t

A su vez, si no aparecen los códigos de las teclas del mando pulsadas, puede ser que haya un programa capturando las teclas de Lirc, o que el servidor de X Windows esté usando el mando a distancia como dispositivo de entrada estándar, e impida que lleguen los códigos al comando "ir-keytable". Puedes comprobarlo parando Lirc con el siguiente comando:

/etc/init.d/lirc stop

Si ahora funciona se puede seguir con la configuración del mando. Si no se puede probar a parar las X:

/etc/init.d/kdm stop

Y si ahora sí funciona el comando "ir-keytable" debemos añadir lo siguiente al fichero de la ruta "/usr/share/X11/xorg.conf.d/10-evdev.conf":

Section "InputClass"
    Identifier "IR-receiver inside an USB DVB receiver"
    MatchProduct "IR-receiver inside an USB DVB receiver"
    MatchIsKeyboard "true"
    Option "Ignore" "true"
EndSection

El identificador del mando hay que bucarlo ejecutando el siguiente comando:

cat /proc/bus/input/devices

Ahora podemos arrancar de nuevo las X y ver que el comando "ir-keytable" funciona:

/etc/init.d/kdm start

El siguiente paso es el más importante, que consiste en modificar la tabla de correspondencia de teclas que tiene configurado el kernel. En mi caso está en el fichero "/lib/udev/rc_keymaps/avermedia_m135a".

Para adaptar adecuadamente este fichero al mando a distancia en concreto, se debe ir viendo el código asociado a cada tecla. Para lo que se puede usar el siguiente comando:

ir-keytable -s rc0 -t

Una vez editado el fichero, para que los cambios surtan efecto en caliente, hay que ejecutar los siguientes comandos.

ir-keytable -c
ir-keytable -w /etc/rc_keymaps/rc0_avermedia

La siguiente vez que se reinicie la máquina, la nueva tabla de códigos del mando a distancia se cargará automáticamente.

El contenido final del fichero "/lib/udev/rc_keymaps/avermedia_m135a" es el siguiente:

0x0205 KEY_1
0x0206 KEY_2
0x0207 KEY_3
0x0209 KEY_4
0x020a KEY_5
0x020b KEY_6
0x020d KEY_7
0x020e KEY_8
0x020f KEY_9
0x0211 KEY_0
0x0213 KEY_PREVIOUS
0x0204 KEY_EPG
0x0215 KEY_MENU
0x0212 KEY_SCREEN
0x021e KEY_LEFT
0x021f KEY_RIGHT
0x0303 KEY_UP
0x0302 KEY_DOWN
0x020c KEY_OK
0x0201 KEY_EXIT
0x0210 KEY_INFO
0x021d KEY_REWIND
0x0218 KEY_PLAY
0x021a KEY_PAUSE
0x021c KEY_FORWARD
0x021d KEY_REWIND
0x021b KEY_STOP
0x0219 KEY_RECORD
0x021c KEY_FORWARD


Fichero de configuración para XBMC ubicado en la ruta $HOME/.xbmc/userdata/Lircmap.xml

<lircmap>
        <remote device="/etc/lirc/lircd.conf">

                <reverse>KEY_REWIND</reverse>
                <play>KEY_PLAY</play>
                <pause>KEY_PAUSE</pause>
                <forward>KEY_FORWARD</forward>
                <stop>KEY_STOP</stop>
                <record>KEY_RECORD</record>

                <left>KEY_LEFT</left>
                <right>KEY_RIGHT</right>
                <up>KEY_UP</up>
                <down>KEY_DOWN</down>
                <select>KEY_OK</select>

                <back>KEY_EXIT</back>
                <menu>KEY_MENU</menu>
                <title>KEY_EPG</title>
                <info>KEY_INFO</info>
                <display>KEY_SCREEN</display>

                <one>1</one>
                <two>2</two>
                <three>3</three>
                <four>4</four>
                <five>5</five>
                <six>6</six>
                <seven>7</seven>
                <eight>8</eight>
                <nine>9</nine>
                <zero>0</zero>

        </remote>
</lircmap>


Fichero de configuración para MythTV ubicado en la ruta $HOME/.lircrc

begin
    prog = mythtv
    button = 1
    config = 1
end

begin
    prog = mythtv
    button = 2
    config = 2
end

begin
    prog = mythtv
    button = 3
    config = 3
end

begin
    prog = mythtv
    button = 4
    config = 4
end

begin
    prog = mythtv
    button = 5
    config = 5
end

begin
    prog = mythtv
    button = 6
    config = 6
end

begin
    prog = mythtv
    button = 7
    config = 7
end

begin
    prog = mythtv
    button = 8
    config = 8
end

begin
    prog = mythtv
    button = 9
    config = 9
end

begin
    prog = mythtv
    button = 0
    config = 0
end

begin
    prog = mythtv
    button = source
    config = Esc
end

begin
    prog = mythtv
    button = menu
    config = M
end

begin
   prog = mythtv
   button = 16_ch_prev
   config = I
end

begin
    prog = mythtv
    button = ch_up
    config = Up
end

begin
    prog = mythtv
    button = ch_down
    config = Down
end

begin
    prog = mythtv
    button = vol_down
    config = Left
end

begin
    prog = mythtv
    button = vol_up
    config = Right
end

begin
    prog = mythtv
    button = fullscreen
    config = Return
end

begin
   prog = mythtv
   button = epg
   config = S
end

begin
   prog = mythtv
   button = play
   config = P
end

begin
   prog = mythtv
   button = record
   config = R
end

begin
   prog = mythtv
   button = stop
   config = Esc
end

begin
   prog = mythtv
   button = pause
   config = P
end

begin
    prog = mythtv
    button = ch_rtn
    config = H
end

begin
    prog = mythtv
    button = teletext
    config = T
end

begin
    prog = mythtv
    button = display
    config = W
end

begin
    prog = mythtv
    button = red
    config = ,
end

begin
    prog = mythtv
    button = yellow
    config = .
end

begin
    prog = mythtv
    button = audio
    config = +
end

begin
    prog = mythtv
    button = mute
    config = -
end


Bibliografía:

http://www.linuxtv.org/wiki/index.php/AVerMedia_AVerTV_Digi_Volar_X_(A815)
http://www.math.ucla.edu/~jimc/documents/bugfix/17-ir-keyboard.html
http://www.mythtv.org/wiki/LIRC
http://wiki.xbmc.org/index.php?title=HOW-TO:Setup_Lirc
http://forum.xbmc.org/showthread.php?tid=101151
http://askubuntu.com/questions/277135/ir-remote-button-being-recognised-by-ir-keytable-but-not-by-irw
http://forum.xbmc.org/showthread.php?tid=132160

--

martes, 3 de diciembre de 2013

Accediendo a un servidor SSH a través de un proxy con Corkscrew



Cuando un servidor proxy impide conectarse a puertos que no sean de navegación web puede usarse la herramienta Corkscrew.

En el siguiente ejemplo muestro los ficheros de configuración necesarios para realizar una conexión SSH a través de un túnel con Corkscrew sobre el proxy HTTP.

Además se incluye en los ficheros la configuración necesaria para que SSH coja un usuario en la conexión y redirija los puertos 4080 y 3128 de la máquina remota. Además, el servidor SSH de los ficheros de ejemplo escucha en el puerto 443.

El formato del fichero ".ssh/config" sería el siguiente:

Host <ip_destino>
    ProxyCommand corkscrew <proxy_host> <proxy_host> %h %p ~/.ssh/proxyauth
    LocalForward 4080 localhost:4080
    LocalForward 3128 localhost:3128
    Port 443
    User <default_user>

Y el formato del fichero ".ssh/proxyauth" sería el siguiente:

<user>:<password>

TRUCO: es posible que el proxy HTTP filtre también por nombre de máquina, con lo que al realizar la conexión SSH con la máquina es mejor usar direcciones IP. Por ejemplo, si se quiere acceder a una máquina que tenga un nombre asignado en un DNS dinámico, como DynDNS o similares, es mejor resolver primero la IP con nslookup, y después usar la IP.

OTRO TRUCO: también es posible que el servidor SSH se tenga que poner en el puerto 443 u 80, porque el proxy puede ser que permita únicamente conexiones destino a esos puertos.

--

miércoles, 6 de noviembre de 2013

Editar metadatos en ficheros de video MP4



Al igual que los ficheros MP3 de música guardan información de las canciones en las etiquetas ID3, o los formatos de ficheros JPG guardan la información de las fotografías con EXIF, los ficheros MP4 también tienen metadatos que permiten guardar información relacionada con los vídeos: fecha de creación, título, etc.

Mantener estas etiquetas actualizadas puede ser útil, por ejemplo, para mantener documentados y clasificados los vídeos familiares. Los gestores de fotografías suelen leer estos metadatos también en los vídeos para organizarlos junto a las fotografías.

Pongo aquí varios ejemplos alternativos que permiten modificar estos metadatos en ficheros MP4, en línea de comandos:

ffmpeg -i video_in.mp4 -acodec copy -vcodec copy -metadata creation_time="2013-06-27 17:50:00" video_out.mp4

avconv -i video_in.mp4 -c copy -metadata date="2013-06-27 17:50:00" video_out.mp4

AtomicParsley video.mp4 --year "2013-06-27 17:50:00"

MP4Box -itags "created=2013-06-27 17:50:00" video.mp4

Bibliografía:

http://ffmpeg.org
http://atomicparsley.sourceforge.net
http://gpac.wp.mines-telecom.fr

--

lunes, 12 de agosto de 2013

Problemas de espacio en Samsung Galaxy Ace (GT-S5830)

Lo peor de este teléfono es tener que andar lidiando constantemente con la falta de espacio en la partición de datos y aplicaciones. Por lo demás, es un teléfono que no está mal, para ser actualmente de la gama baja de Android.

Aquí comento los pasos a seguir para solucionar este problema y poder instalar todas las aplicaciones que queramos, olvidándonos de estos problemas de espacio.

La solución es para el teléfono con la versión de Android original, de fábrica, proporcionada por Samsung.

Lo primero es hacer root el teléfono. Para ello instalamos desde el modo recovery los apks de root que se encuentran en este enlace:

http://androidsu.com/superuser/

Se deben instalar los ficheros:
  • Superuser-3.1.3-arm-signed.zip
  • su-bin-3.1.1-arm-signed.zip

Instalar la aplicación Link2SD para poder pasar las aplicaciones a una partición en la tarjeta SD. Para hacer la partición se debe conectar la tarjeta SD al ordenador con un lector de tarjetas, reducir el tamaño de la partición existente, y creo una nueva partición de tipo ext2. Antes de hacer esto se debe realizar un backup de todos los datos de la tarjeta, por precaución.

Instalar la aplicación SystemCleanup que permite pasar ciertas aplicaciones de la partición de datos a la de sistema y permite también eliminar aplicaciones originales de la partición de sistema. Además, permite crear los ficheros ODEX asociados a las aplicaciones de la partición de sistema, lo que permite liberar espacio de la partición de datos (ya que si no crea estos ficheros ahí) y hacer que el teléfono vaya más rápido.

NOTA: Hay ciertas aplicaciones que interesa que estén en la partición de sistema por ser aplicaciones que usamos habitualmente y queremos que vayan más fluidas. Por lo que no conviene pasar todas las aplicaciones de la partición de datos a la tarjeta SD. Hay que intentar aprovechar el espacio libre de la partición de sistema para estos casos. Las dos aplicaciones anteriores permiten realizar estas labores de forma equilibrada.

Instalar la aplicación ES File Explorer para poder eliminar periódicamente los ficheros temporales y de log contenidos en las siguientes carpetas:
  • /cache
  • /data/anr
  • /data/dalvik-cache
  • /data/log
  • /data/local/tmp
  • /data/system/dropbox
  • /data/system/usagestats
  • /data/tombstones

Realizando estas tareas se podrá disponer de espacio para instalar prácticamente todas las aplicaciones que queramos en el móvil.

--