Chateando en LAN con Linux: el comando talk

Existe desde los años 80 en los sistemas basados en UNIX, y Linux no es una excepción, un programa en línea de comandos llamado talk. ¿Qué nos permite hacer este comando? Pues chatear con otro terminal.

Imagina que dos usuarios estáis conectados por ssh a un mismo sistema y queréis comunicaros. En principio, si tenéis talk instalado (si no viene por defecto en vuestra distro lo podéis instalar desde algún repositorio tal que # apt-get install talk talkd), bastaría con que pusieras el comando talk seguido del usuario, y si ambos tenéis talk instalado se le abrirían dos ventanas de terminal: una para escribir y otra en la que vería los mensajes.

En caso de querer chatear con un usuario de otro equipo la cosa sería similar, en ese caso en lugar del usuario lo que tendríais que mandar como parámetro al abrir talk es el usuario seguido de una arroba y el nombre o la ip de la máquina. Por ejemplo:

#ej 1
#usuario en el mismo equipo
talk donnie
#ej 2
#usuario en LAN
talk donnie@192.168.1.100

El comando mesg será en este caso el que nos permitirá decidir si un usuario puede enviarnos mensajes por talk o no a nuestro terminal.

#Si no queremos recibir
#mensajes por talk
mesg n
#si queremos permitirlo
mesg y

Es posible que los cortafuegos impidan la comunicación con talk: Revisa los puertos TCP y UDP 518 y 517, así que fíjate si están abiertos.

Y de esta forma tienes un primitivo chat en tu equipo, no es gran cosa, pero en ocasiones es útil.

Instalando SopCast en Ubuntu

El otro día os hablaba de cómo instalar AceStream en Ubuntu y derivados, y voy a complementarlo añadiendo otro popular software para ver retransmisiones por streaming p2p: SopCast.

He testeado en un Lubuntu 15.10 de 32bits y me ha funcionado sin problema. Los comandos serían los siguientes:

#añadimos el repositorio e instalamos el ppa, sin más
sudo add-apt-repository -y ppa:lyc256/sopcast-player
sudo apt-get update
sudo apt-get install sopcast-player

Otra opción es utilizar un paquete .deb de los que hay en este enlace, aunque no lo he probado y no se qué tal funciona.

Instalar AceStream en Linux

Acostumbro a ver el Seis Naciones en el bar, en Compostela tenemos la suerte de que A Novena Porta le de preferencia al rugby sobre el resto de deportes, pero justo este sábado estoy en casa de mis padres, y quería ver los dos partidos de la tarde. Y para ello necesitaba AceStream. En Windows su instalación es la clásica «todopalante«. En Ubuntu y derivados es posible usar este software para ver streamings p2p, pero requiere instalar desde línea de comandos.

#agregamos repositorios
echo 'deb http://repo.acestream.org/ubuntu/ trusty main' | sudo tee /etc/apt/sources.list.d/acestream.list

#y la clave pública
sudo wget -O - http://repo.acestream.org/keys/acestream.public.key | sudo apt-key add -

#actualizamos apt desde el repositorio
sudo apt-get update

#e instalamos el AceStream
sudo apt-get install acestream-full

En caso de que uses ElementaryOS puedes tener un problema y que te aparezca el mensaje Error «Cannot connect to engine. Check if engine installed.» En ese caso puedes probar dos comandos para arrancar el motor de AceStream manualmente:

#prueba esto
acestreamengine --client-gtk --gui-gtk
#y si tampoco va, con esto ya debería
acestreamengine --client-console

En Firefox el plugin debería arrancar automáticamente, en Chrome creo que lo tendrías que arrancar de forma manual.

Deshabilitar el teclado de un portátil en linux

Ayer el teclado del portátil me pegó un susto muy cabrón. No tengo claro qué le pasa (hoy ha dado un poco por culo también) pero de golpe hay teclas que se «pulsan» solas. Ayer pasaba con el CTRL y hoy con la flecha derecha. La parte buena es que tenía un teclado USB, y con cierto esfuerzo logré deshabilitar el teclado para funcionar sólo con el externo. Os explico como:

Empezamos abriendo una consola de comandos, y ahí ponemos

ximput --list

Esto sacará un listado de los dispositivos de entrada del equipo, tal que así:

consola xinput

Como puedes ver en este caso es el dispositivo número 11 (no siempre es el mismo, depende de si se han conectado más dispositivos externos, por ejemplo). Entonces bastaría con un comando para deshabilitar, y otro para rehabilitar:

#este desconecta
#cambia el 11 por el número de tu dispositivo
xinput set-int-prop 11 "Device Enabled" 8 0

#este reconecta
xinput set-int-prop 11 "Device Enabled" 8 1

Esta configuración se pierde al reiniciar, no es permanente. Podrías incluir el comando en el init.d para que se ejecute en la carga… pero si has insertado un teclado USB puede que el número no coincida.

Instalando Guest Additions de VirtualBox en Lubuntu 15.10

Primer contacto con una versión 15.10 de Ubuntu: esta mañana he tenido que montar una máquina vitual en el curro para un experimento. Por temas de ligereza ha sido un Lubuntu, la versión con el ligero escritorio LXDE, concretamente la vesión de 32 bits.

Vamos a meternos en harina (en el tema de las guest additions, no era un chiste sobre Albert Rivera) ¿Cómo instalo la Guest Additions?

  • Abrimos un terminal y ejecutamos sudo apt-get install virtualbox-guest-additions-iso
  • Le llevará un ratillo (al menos a mi me lo llevó). Al acabar vamos al menú desplegable de la esquina inferior izquierda, seleccionamos Preferencias y desde allí escogemos Software y Actualizaciones. Os dejo esta imagen ilustrativa:
    Lubuntu software actualizacións
  • Ahora nos queda desmarcar las opciones de usar los controladores de Virtual Box en lugar de los de serie del sistema operativo, tal que así: Software y Actualizaciones

Y tras un reinicio la cosa debería ir ya como la seda.

Comprimiendo en zip desde línea de comandos en Linux (Ubuntu/Debian)

Esta mañana a uno de mis equipos se empezó a ir un poco la pinza. No me digais por qué pero si intentaba comprimir utilizando la utilidad gráfica por defecto de Ubuntu no me lo permitía, se quedaba tirado el programa al hacerlo. Al final se arregló reinstalando, pero el caso es que en aquel momento no tenía conexión a internet para hacerlo y necesitaba crear un zip para pasarle una serie de archivos a una usuaria de Windows. Así que tocó usar la consola de comandos.

¿Cómo hice para comprimir la carpeta? Bueno la sintaxis del comando zip es

zip nombreDeArchivoFinal archivoacomprimir1 archivoacomprimir2…

En el ejemplo os dejo varias posibilidades comentadas:

#para incluir subdirectorios
#hay que añadir la opción -r
zip -r resultado.zip carpeta1

#con el comodín * podemos comprimir
#todos los ficheros dentro de una carpeta
zip resultado.zip *

#zip nos permite proteger el archivo
#con una contraseña, pero hay que
#ver que su algoritmo no es muy seguro
zip --password MI_CONTRASEÑA_ELEGIDA protegido.zip archivo1 archivo2 archivo3

#Una opción para codificar con más seguridad sería usar GPG
#primero comprimimos en zip
#luego codificamos la carpeta
#nos pedirá que insertemos la contraseña tras el comando GPG
zip -r resultado.zip carpeta1
gpg -c resultado.zip

#otra opción es usar openssl para encriptar
#primero comprimimos en zip
#luego codificamos la carpeta
#y nos pedirá password igual que antes
zip -r resultado.zip carpeta1
openssl aes-256-cbc -e -in resultado.zip -out resultado.zip.aes

En los ejemplos hemos usado criptografía de clave simétrica, pero siempre podeis investigar formas de utilizar algoritmos de clave pública/privada, ya que tanto gpg como openssl están pensados para poder hacerlo.

Uniendo documentos pdf en Linux con pdftk

En el anterior artículo hablábamos sobre cortar pdf en distros Linux utilizando la utilidad pdftk. Ahora vamos a ver cómo hacer lo contrario: unir varios pdf en uno solo.

No repetiré los pasos de instalación de pdftk porque están en el artículo anterior. Obviando esto nos metemos en harina: lanzamos un terminal y nos ponemos en la carpeta en la que están los pdf y cuando estemos allí usamos el siguiente comando (en el ejemplo fusionaremos dos archivos que se llaman archivo1.pdf y archivo2.pdf en uno nuevo llamado nuevoArchivo.pdf)

pdftk archivo1.pdf archivo2.pdf cat output nuevoArchivo.pdf

Y luego podemos combinar ambas ideas: cortar y unir en un solo comando. En el ejemplo extraeremos las dos primeras páginas del archivo1, la quinta del archivo2 y la octava del archivo1 y crearemos el archivo3 con estas en ese orden.

pdftk A=archivo1.pdf B=archivo2.pdf cat A1-2 B5 A8 output archivo3.pdf

Como veis nos servimos del comando cat para concatenar archivos y de output para dirigir la salida de cat hacia un nuevo archivo pdf.

Cortando y dividiendo documentos pdf en Linux

No es extraño (que cantaba Tom Jones) el tener que cortar un documento pdf. Hoy mismo me mandaron dos facturas en el mismo documento y las necesitaba separadas porque tenía que enviarlas a dos correos distintos. ¿Cómo se puede solucionar esto?

Lo primero es instalar pdftk:

#si lo hacemos en una distro Ubuntu/Debian
sudo apt-get install pdftk

#Si lo hacemos en Fedora/RedHat
sudo yum install pdftk

Una vez instalado la forma más simple de cortar el pdf es usan burst, que lo que hará será generar una página independiente por cada una de las páginas del pdf original.

pdftk archivo.pdf burst

Esto generará varios archivos llamados pg_001.pdf, pg_002.pdf… en mi caso me bastaba con esto porque eran dos páginas pero ¿qué pasa si manejas un pdf de 600? Es probable que no quieras 600 archivos nuevos. Por suerte pdftk es una herramienta potente que nos da gran flexibilidad a la hora de trabajar, y disponemos de un comando que nos permite extraer una serie de páginas concretas de un documento hacia un nuevo archivo. Vamos con el ejemplo, donde sacaremos las páginas de la 30 a la 45 de un archivo y generaremos uno nuevo con ellas:

$ pdftk A=archivo.pdf cat A30-45 output archivofinal.pdf

Y es más, podemos extraer páginas de dos pdf distintos y sacarlas todas en un mismo documento. En el ejemplo sacaremos las páginas del 10 al 15 del documento 1 y las 15-18 del documento 2:

$ pdftk A=archivo.pdf B=archivo.pdf cat A10-15 B15-18 output archivofinal2.pdf

Y próximamente veremos cómo fusionar archivos.

Configurando un sistema Debian para que monte en el inicio las carpetas compartidas NFS

Recordarás que hace un par de días hablamos sobre cómo configurar y montar una carpeta en red usando NFS en un sistema Debian. Ese artículo nos servirá de ejemplo para el presente ¿cómo hacemos que los clientes monten la carpeta desde el inicio?.

Vamos con un resumen rápido del artículo anterior (por si estás vago para leerlo): la ip del servidor es 192.168.1.2, la carpeta se llama /compartida y el punto de montaje es /mnt/nfs/compartida.

Bueno, basándonos en nuestro conocimiento de Linux sabemos que los discos y particiones montados en el arranque se configuran en el archivo /etc/fstab (abreviatura de File Systems Table) así que lo abrimos con un editor de texto (nano, gedit, vi, emacs… el que más o guste) y añadimos una nueva línea para montar. Cada una de estas líneas se compone de la siguiente forma:

  1. Primero la dirección de la unidad compartida, en este caso 192.168.1.2:/compartida
  2. Después va el punto de montaje, para el ejemplo /mnt/nfs/compartida
  3. El sistema de archivos, que en este caso es nfs.
  4. Las opciones son varias, y las puedes ver en la página oficial de Ubuntu. Para el ejemplo serán auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1200.
  5. La frecuencia con la que se usará dump para respaldar el sistema de archivos. Si se pone a 0 no se hará copia (más velocidad, menos seguridad).
  6. La frecuencia con la que fsck revisará el volumen en busca de errores. Si se deja a 0 no lo hará (más velocidad, menos seguridad)

Así que al final la línea que meteríamos, siguiendo el ejemplo del artículo anterior, sería tal cual esta:

192.168.1.2:/compartida /mnt/nfs/compartida nfs auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1200 0 0

Una vez guardados los cambios bastará reiniciar para comprobar que han surtido efecto

Carpetas compartidas en red en Ubuntu: Instalando y configurando una con NFS

Vamos a ver cómo compartir una carpeta utilizando una distribución de linux de la familia Debian (Ubuntu, Debian, Linux Mint). Y vamos a ver cómo hacerla mediante línea de comandos para que sea universal para todas las distribuciones (en las distros «no Debian» no cambiaría mucho la cosa, exceptuando la parte de instalar los paquetes el resto iría más o menos igual, creo)

El primer paso es instalar los paquetes nfs-kernel-server,nfs-common y rpcbind en el equipo que servirá la carpeta. Para ello usamos el siguiente comando:

sudo apt-get install nfs-kernel-server nfs-common rpcbind

Tras esto reiniciamos el equipo.En los equipos clientes, que se van a conectar con la carpeta, tenemos que instalar sólo los dos últimos paquetes, no es necesario el del servidor:

sudo apt-get install nfs-common rpcbind

Lo siguiente es crear la carpeta a compartir, en este caso se llamará compartida, y configurar los permisos para no tener problemas al acceder a ella. En este caso daremos a los usuarios permisos totales sobre la carpeta y no habrá grupo propietario, para que puedan hacer lo que les plazca.

sudo mkdir /compartida
sudo chown nobody:nogroup /compartida
sudo chmod -R 777 /compartida

Ahora tenemos que decirle al sistema qué carpetas vamos a compartir editando el archivo /etc/exports. La sintaxis es rutaCarpeta cliente_A(opciones) cliente_B(opciones). Tenemos múltiples opciones a la hora de definir a los clientes: una dirección ip o un rango de ellas, el nombre DNS del equipo o caracteres comodín (para dar acceso a cualquier equipo basta poner el comodín *).

En cuanto a las opciones son las siguientes:

  • ro(read-only): La carpeta compartida será de sólo lectura. Si no se define, es la opción por defecto.
  • rw (read-write): El usuario tiene permisos para escribir en la carpeta y hacer cambios en ella.
  • wdelay: El servidor NFS no escribe en el disco si espera otra solicitud inminentemente. Esto reduce los accesos a disco mejorando el rendimiento. Sólo funciona cuando usamos la opción sync.
  • no_wdelay: Desactiva wdelay.
  • sync: No permite responder peticiones antes de escribir los cambios pendientes. Se trata de la opción predeterminada.
  • async: Deshabilita sync. Esto mejora el rendimiento pero provoca que exista el riesgo de corrupción en los archivos si se produjese un corte de luz o una caída de la red.
  • subtree_check: Si el directorio compartido es un subdirectorio de un sistema de archivos mayor NFS comprobará los directorios por encima de éste, verificando sus permisos. Se trata de la opción predeterminada.
  • no_subtree_check: Deshabilita la característica anterior. Así se consigue agilizar el envío de la lista de archivos, pero reduciendo la seguridad del sistema.
  • root_squash: Evita que los usuarios con privilegios mantengan los permisos administrativos sobre la carpeta compartida, cuando se conectan remotamente.Es la opción activada por defecto
  • no_root_squash: Deshabilita root_squash.

Así que en nuestro archivo /etc/exports toca añadir la siguiente línea, con la que daremos permisos de lectura/escritura, activaremos la opción de sync y la de no comprobar todo el árbol superior a todos los clientes que se conecten:

#recordamos: primero la ruta
#después el cliente, en este caso * para todos
#y finalmente las opciones
/compartida *(rw,sync,no_subtree_check)

Y tras eso, toca reiniciar el servidor nfs:

sudo /etc/init.d/nfs-kernel-server restart

Lo siguiente será crear un punto de montaje para la carpeta compartida en los equipos cliente (vamos a suponer que la IP del servidor es 192.168.1.2):

sudo mkdir -p /mnt/nfs/compartida
#aunque ya dimos permisos a la carpeta
#también se los damos al punto
#de montaje
sudo chmod -R 777 /mnt/nfs
#y montamos la carpeta
sudo mount 192.168.1.2:/compartida /mnt/nfs/compartida

Y tras esto ya deberías poder crear y leer archivos en la carpeta compartida desde los clientes conectados en la red. Más adelante veremos algunas cosas sobre carpetas compartidas.