Un blog de...

Mi foto
Un ente multicelular, polisistemático, psicosocial y ciberespacial; hiperlaboral, intersintético, polifacético, uniespiritual, hipoeconómico, tecnofílico, pseudopoético y megaridículo...
Mostrando entradas con la etiqueta Ubuntu. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ubuntu. Mostrar todas las entradas

lunes, 30 de agosto de 2021

Smartphone como extensión del escritorio de Ubuntu

¿Sabías  que puedes convertir tu smartphone en una pantalla adicional que extiende el escritorio de tu laptop?

La disposición habitual de pantallas físicas en mi oficina es la siguiente:

  • Pantalla de laptop (1600x900), ubicada como pantalla principal, al centro.
  • Pantalla adicional conectada al puerto HDMI-1 (1920x1080), ubicada a la izquierda de la pantalla principal.

Para extender mi escritorio a una tercera pantalla, uso un smartphone que está ubicado a la derecha de la pantalla principal.

La cuestión es ¿cómo consigo que la pantalla de mi smartphone funcione en calidad de extensión del escritorio de mi laptop? Tengo identificadas dos respuestas:

La más sencilla es usando Deskreen, con las desventajas de que no permite interactuar con el contenido desde el propio smartphone, no permite un control de la resolución y suele desconectarse con más frecuencia.

La segunda respuesta es más complicada, aunque más interesante y ofrece las ventajas de hacer posible la interacción con el contenido desde el propio smartphone y manipular la resolución. Esta opción es la que desglosaré y requiere de los siguientes ingredientes:

  • Red
    • La laptop y el smartphone deben estar conectados a la misma red de área local.
  • En la laptop:
    • Sistema operativo GNU/Linux (yo uso Kubuntu 20.04, pero otras distribuciones basadas en Debian funcionarán igual).
    • x11vnc instalado (muy recomendable tenerlo configurado para funcionar con contraseña y a través de SSH). Esto servirá para crear una pantalla virtual, "proyectable" en cualquier dispositivo que pueda ejecutar un cliente VNC.
    • Conexión "dummy" conectada a la salida VGA o, como en mi caso, conectar a dicha salida un cable que da a la entrada VGA del mismo monitor que tengo a la izquierda, esto es para hacer creer al sistema que hay un tercer monitor conectado.
    • Terminal de comandos (yo uso Konsole, pero cualquier otra funcionará igual).
  • En el smartphone:
    • Sistema operativo Android (aunque seguro también hay forma de hacerlo funcionar en iOS).
    • Alguna app que funcione como cliente VNC (yo uso Remote Ripple PRO).
    • Si se usa SSH, alguna app que permita redirigir puertos (yo uso ConnectBot).

En los siguientes pasos se asume que x11vnc ya está configurado con contraseña y que el smartphone ya tiene configurada una conexión SSH hacia la laptop.

Etapa 1: Hacerle creer a mi laptop que hay una tercera pantalla física conectada

  1. Obtener la información de los puertos de video disponibles en la laptop:

    xrandr Screen 0: minimum 320 x 200, current 3520 x 1080, maximum 16384 x 16384 eDP-1 connected primary 1600x900+1920+0 (normal left inverted right x axis y axis) 309mm x 174mm 1600x900 60.00*+ 59.99 59.94 59.95 59.82 1440x900 59.89 1440x810 60.00 59.97 1360x768 59.80 59.96 1280x800 59.99 59.97 59.81 59.91 1152x864 60.00 1280x720 60.00 59.99 59.86 59.74 1024x768 60.04 60.00 960x720 60.00 800x600 60.00 60.32 56.25 840x525 60.01 59.88 864x486 59.92 59.57 800x512 60.17 700x525 59.98 800x450 59.95 59.82 640x512 60.02 720x450 59.89 640x480 60.00 59.94 680x384 59.80 59.96 640x400 59.88 59.98 640x360 59.86 59.83 59.84 59.32 512x384 60.00 512x288 60.00 59.92 480x270 59.63 59.82 400x300 60.32 56.34 432x243 59.92 59.57 320x240 60.05 360x202 59.51 59.13 320x180 59.84 59.32 DP-1 disconnected (normal left inverted right x axis y axis) HDMI-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 509mm x 286mm 1920x1080 60.00*+ 1280x1024 60.02 1440x900 59.90 1280x800 59.91 1152x864 75.00 1024x768 70.07 60.00 800x600 60.32 56.25 640x480 66.67 59.94 720x400 70.08 DP-2 disconnected (normal left inverted right x axis y axis) HDMI-2 disconnected (normal left inverted right x axis y axis)


    Con la información obtenida, tomo nota de alguno de los dispositivos desconectados, en este caso DP-2
  2. Generar el modeline para la resolución con la que se desea proyectar en la pantalla virtual, en este caso será 1200x540 (para que coincida en proporción a las dimensiones de la pantalla del smartphone, sin que los textos queden diminutos) a 120 MHz:

    gtf 1200 540 120 # 1200x540 @ 120.00 Hz (GTF) hsync: 69.48 kHz; pclk: 112.28 MHz Modeline "1200x540_120.00" 112.28 1200 1280 1408 1616 540 541 544 579 -HSync +Vsync

  3. Crear un nuevo modo de resolución basado en el modeline obtenido en el paso anterior:

    xrandr --newmode "1200x540_120.00" 112.28 1200 1280 1408 1616 540 541 544 579 -HSync +Vsync

  4. Añadir el modo creado como una opción en la salida de video no usada realmente, conectada a un dummy o a un cable que lleva a una entrada no usada en el monitor, en este caso, DP-2:

    xrandr --addmode DP-2 1200x540_120.00

  5. Conectar el cable al puerto de salida de video no usado en la laptop y llevarlo al puerto de entrada de video no usado en el monitor, entonces, habilitar la pantalla virtual usando el nuevo modo añadido y usarlo para extender el escritorio a la derecha de la pantalla principal (en este caso, eDP-1):

    xrandr --output DP-2 --mode 1200x540_120.00 --right-of eDP-1

    Esto extenderá el escritorio a la pantalla virtual que, actualmente, es "invisible", aunque es posible notar que el puntero del ratón ya se puede mover más allá del borde derecho.

Hasta este punto, el diagrama de monitores que muestra la herramienta de configuración de pantallas de KDE-Plasma, ayuda a entender mejor lo que se está configurando:

Hacer visible la pantalla virtual en otro dispositivo (en este caso, en el smartphone)

A partir de lo anterior, el comando de x11vnc que se debe ejecutar en el equipo emisor (laptop) es:

x11vnc -localhost -usepw -forever -bg -geometry 1200x540 -shared -noprimary -auth /var/run/lightdm/root/:0 -display :0 -clip 1200x540+3520+450 -threads -noxdamage -noxwarppointer

Explico los parámetros:

-geometry establece la resolución de la sesión VNC y debe coincidir con el tamaño de la pantalla virtual: 1200x540.

-clip define una resolución objetivo (1200x540) y un recorte desde el borde izquierdo del escritorio actual (en este caso, se suma el ancho de la pantalla adicional al ancho de la pantalla principal, 1920+1600=3520), es decir, 3520 en el eje horizontal y 450 en el eje vertical. Nota: El recorte en el eje horizontal sería negativo si la pantalla virtual estuviera a la izquierda de la principal.

-threads y -noxdamage mejoran el desempeño de la conexión VNC para estos fines.

Por último, se conecta el otro dispositivo al servicio VNC, en este caso, conecto el smartphone así:

  1. Activo la conexión a la laptop mediante SSH desde ConnectBot y verifico que la redirección de puertos coincide con el servicio VNC, debe verse así:
  2. Activo la conexión VNC que, en RemoteRipple, debe estar configurada así:

    Lo importante son el Host (localhost) y el Puerto (5900, o el dato que arroje el comando de x11vnc en la laptop). El nombre puede ser cualquiera.

    Una recomendación que me encontré, es que, una vez activa la conexión, se configure un método de codificación con baja compresión, ya que los dispositivos están conectados a la misma red de área local, esto impactará poco en la velocidad de la red y mejorará notablemente el redibujado de la pantalla en el smartphone, porque requiere menos procesamiento.

    Al activar la conexión VNC, se mostrará la parte del escritorio de la laptop que se ha configurado para mirarse por esa vía. Es posible arrastrar ventanas desde cualquiera de las pantallas hacia la del smartphone. También es posible interactuar con esa parte del escritorio, ya sea desde el teclado y touchpad de la laptop o tocando físicamente la pantalla del smartphone.


sábado, 9 de marzo de 2019

Iniciar un lapso específico de grabación de video desde línea de comandos

Fue necesario investigar en muchas fuentes y hacer varios experimentos, pero al fin conseguí realizar una grabación, iniciada en línea de comandos, desde la cámara web de una laptop de gama media (adquirida en 2011) con esta orden para VLC:
cvlc -I dummy v4l2:// :input-slave=alsa:// :v4l-vdev="/dev/video0" :v4l-norm=3 :v4l-frequency=-1 :v4l-caching:1500 :v4l-samplerate=44100 :v4l-channel=0 :v4l-tuner=-1 :v4l-audio=-1 :v4l-stereo :v4l-width=480 :v4l-height=640 :v4l-brightness=0 :v4l-colour=-1 :v4l-hue=-1 :v4l-contrast=0 :no-v4l-mjpeg :v4l-decimation=1 :v4l-quality=100 --sout-mux-caching=5000 --sout="#transcode{vcodec=mp4v,scale=0.7,acodec=mp4a,ab=96,channels=1,samplerate=44100}:standard{access=file,mux=mp4,dst=Vídeos/Desde casa/cam_`date +%Y-%m-%d_%H-%M-%S`.mp4}"
Para lograr que la grabación termine automáticamente después de un tiempo determinado en segundos, fue necesario insertar el comando en un script, ya que las referencias sobre utilizar parámetros internos de VLC como vlc://quit, --run-time=[segundos] y --stop-time=[segundos] no funcionaron en ninguna de las combinaciones. El script lo puse en ~/.local/bin/vlc_cam y su contenido es este:
  1. #!/bin/bash
  2. #Nombre del script: vlc_cam
  3. #Script para grabación desde webcam mediante vlc.
  4. #Este script fue desarrollado en Ubuntu 18.04.
  5. #Paquetes que deben instalarse previamente: vlc
  6. #Fecha de creación: 2019-01-22
  7. #Autor: @leoperbo
  8. echo '¿Cuántos segundos grabar?'
  9. read TIEMPO
  10. echo 'Presiona CTRL+C para interrumpir la grabación manualmente.' &&
  11. timeout "$TIEMPO" cvlc -I dummy v4l2: :input-slave=alsa: :v4l-vdev="/dev/video0" :v4l-norm=3 :v4l-frequency=-1 :v4l-caching:1500 :v4l-samplerate=44100 :v4l-channel=0 :v4l-tuner=-1 :v4l-audio=-1 :v4l-stereo :v4l-width=480 :v4l-height=640 :v4l-brightness=0 :v4l-colour=-1 :v4l-hue=-1 :v4l-contrast=0 :no-v4l-mjpeg :v4l-decimation=1 :v4l-quality=100 –sout-mux-caching=5000 –sout="#transcode{vcodec=mp4v,scale=0.7,acodec=mp4a,ab=96,channels=1,samplerate=44100}:standard{access=file,mux=mp4,dst=Vídeos/Desde casa/cam_`date +%Y-%m-%d_%H-%M-%S`.mp4}"
Además de solucionar la disfunción de parámetros de VLC asociados a la duración de una grabación, el script me ofrece estas ventajas:
  • Iniciar la grabación desde línea de comandos con una línea de texto corta (útil para control remoto vía SSH).
  • Decidir la duración de forma variable y rápida al iniciar la orden de grabación.
Para iniciar la grabación desde una terminal basta con escribir la ruta al script:
.local/bin/vlc_cam ¿Cuántos segundos grabar? 20 Presiona CTRL+C para interrumpir la grabación manualmente. VLC media player 3.0.4 Vetinari (revision 3.0.4-0-gf615db6332)

Páginas consultadas:

jueves, 7 de mayo de 2015

Carpetas compartidas desde Ubuntu (Samba)

Ubuntu permite compartir carpetas en redes domésticas (comúnmente conocidas como "Redes de Windows") a través del software "Samba". Como usuario, ni te enteras del nombre de dicho software, únicamente abres el explorador de archivos, das clic derecho sobre un directorio, seleccionas "Recurso compartido en red local" y veras una ventana llamada "Compartición de carpetas" en la que puedes activar la opción "Compartir esta carpeta", dar clic en el botón "Crear compartición" y ¡listo!... ¿Listo?
Lo que Ubuntu no te aclara es:
  • La vía fácil (menos segura) para acceder a tus carpetas compartidas desde otras máquinas: es necesario activar la opción "Acceso invitado (para personas sin una cuenta de usuario)".
  • La vía un poco más larga (más segura) para acceder a tus carpetas compartidas desde otras máquinas:
    1. Primero debes editar el archivo de configuración de Samba: en una terminal ejecuta:
      sudo nano /etc/samba/smb.conf
      Modifica la línea "server role" para que quede así:
      server role = member server
      Cierra y guarda.
    2. Después, debes agregar tu nombre de usuario a la lista de usuarios de Samba: en una terminal ejecuta:
      sudo smbpasswd -a tunombredeusuario
      (sustituye el término "tunombredeusuario" con tu nombre de usuario). Se te preguntará la contraseña de superusuario, después se te pedirá una contraseña para el usuario Samba que estás agregando, esta puede ser diferente a la contraseña de usuario Ubuntu.
    3. En la misma terminal ejecuta:
      sudo service smbd restart
Se pueden agregar usuarios Samba adicionales (deben coincidir con los nombres de usuario existentes en tu dispositivo Ubuntu), por ejemplo:
sudo smbpasswd -a tunovia

Las dos vías (fácil y larga) pueden combinarse para ofrecer distintos niveles de compartición de archivos y carpetas, por ejemplo:
  • Puedes compartir la carpeta "Público" para permitir acceso a invitados (sin cuenta de usuario) y colocar en dicha carpeta archivos que deseas compartir abiertamente y que NO contengan información que prefieras mantener privada.
  • Puedes, además, compartir otra carpeta, digamos "Compartido", para NO permitir acceso a invitados, de manera que únicamente las personas que tengan una cuenta de usuario Samba registrada en la máquina desde la que estás compartiendo podrán revisar su contenido.

Acceder a las carpetas compartidas desde otros equipos

Una vez establecidas tus carpetas compartidas, podrás acceder a ellas desde otros equipos conectados a la misma red local (al mismo router). Para ello basta con acceder al apartado de "Red Local" o "LAN" en cualquier software que ofrezca esta funcionalidad (Explorador de archivos de Windows, ES File Explorer en Android), quizás sea necesario solicitar al programa que refresque o actualice el contenido del aparatado de Red Local para que descubra tu equipo con carpetas compartidas:


En el caso de ES File Explorer para Android, si queremos acceder a carpetas compartidas que no admiten invitados, hay que presionar unos segundos sobre el icono del "servidor de carpetas compartidas" (tendrá el nombre de la computadora desde la que estamos compartiendo) y elegir la opción "Editar Servidor":

  1. Desactiva la opción "Anónimo"
  2. Coloca el nombre del Dominio (normalmente "WORKGROUP")
  3. Coloca el nombre de usuario de Samba registrado en Ubuntu
  4. Coloca la contraseña del usuario de Samba y presiona "OK"

A partir de ese momento, podrás acceder desde tu dispositivo Android a tus carpetas compartidas en tu dispositivo Ubuntu.

miércoles, 23 de noviembre de 2011

Solución: Migración Mbox - MailDir en Evolution de Ubuntu 11.10

Con la actualización a Ubuntu 11.10 vino un cambio notable en la forma de guardar mensajes de correo en Evolution, que es el software que sigo usando para administrar mis correos, citas y contactos.

El cambio consiste en pasar de "mbox" (un archivo que acumula todos los mensajes) a "maildir" (un directorio donde se guarda cada mensaje en un archivo separado). Al iniciar Evolution por primera vez después de actualizar el Sistema Operativo a Ubuntu 11.10, se muestra un mensaje que indica la necesidad de realizar la migración de los mensajes al nuevo formato, en mi caso no hubo problemas durante el proceso, pero sí se presentaron los siguientes inconvenientes:

1) Mensaje de error al enviar correos:
"Your message was sent, but an error ocurred during post-processing. The reported error was "failed to appendo to mbox:///home/***/.local/share/evolution/mail/local#Sent: Invalid folder URI... Appending to local 'Sent' folder instead"
 El correo sí se envía, lo único que ocurre realmente es que el sistema es incapaz de guardar los mensajes enviados en las carpetas originalmente configuradas y avisa al usuario que se usa otra carpeta diferente para realizar la función. Para deshacernos del molesto mensaje basta con ir al menú [> Editar > Preferencias ] y en la sección "Cuentas de Correo" eliminar las cuentas y volverlas a configurar desde cero (sólo se eliminará la configuración de las cuentas, los mensajes permanecerán intactos). También es posible editar las cuentas y, en la pestaña "Predeterminados", seleccionar las carpetas especiales válidas.


2) Los mensajes de correo almacenados desde la versión anterior, aparecen duplicados. Aunque Evolution tiene un función que debería solucionar este problema en el menú [> Mensaje > Quitar correos duplicados] esto parece provocar un cierre repentino del programa sin conseguir el objetivo. La alternativa de solución es cerrar Evolution e instalar el paquete "fdupes":

sudo apt-get install fdupes


Una vez instalado "fdupes", ejecutamos el siguiente comando en Terminal:

fdupes -d -N ~/.local/share/evolution/mail/local/cur


Al concluir el proceso, abrimos Evolution, aunque al inicio veamos que aún aparecen mensajes duplicados, debemos esperar alrededor de 5 minutos sin ejecutar ninguna acción sobre los mensajes, permitiendo que se verifique automáticamente la integridad de las carpetas (veremos un mensaje de que se está llevando a cabo dicho proceso en la barra de estado de la parte inferior, estará algunos minutos indicando  que lleva el 99% realizado).

Cuando desaparece el mensaje de verificación de integridad de carpetas podremos revisar nuestra bandeja de entrada para ver que los duplicados han desaparecido.

Nota al margen: No migré a Mozilla Thunderbird (que es el nuevo cliente de correo predeterminado en Ubuntu) porque aún no hay forma de sincronizar directamente contactos y citas entre ese cliente y mi celular, mientras que Evolution sí lo consigue muy bien usando "syncevolution".

martes, 8 de noviembre de 2011

Solución: Conexión a MSN desde Empathy (Nov-2011)

Desde el 7 de noviembre de 2011 Empathy, además de otros programas de mensajería, dejaron de conectarse al servicio de MSN, al parecer porque Microsoft cambió una URL en su protocolo y no dio aviso.

A continuación les comparto la solución encontrada en los foros de Ubuntu traducida al idioma de Cervantes:

1. Cerrar todos los procesos asociados a Empathy que se estén ejecutando (telepathy, empathy...), si lo quieres hacer de manera gráfica puedes abrir el Monitor del Sistema y en la pestaña "Procesos" seleccionar todos los procesos que incluyan "empathy" o "telepathy" en su nombre y oprimir el botón "Finalizar".

2. Abrir en el editor de textos el archivo de sistema donde se encuentra la URL que cambió y que permite conectar al servicio MSN (se necesita la contraseña de superusuario de tu sistema), para ello puedes usar el siguiente comando:

sudo gedit /usr/share/pyshared/papyon/service/description/AB/__init__.py

3. Editar la línea número 23 que hasta ahora dice:

url = "http://contacts.msn.com/abservice/abservice.asmx"

Para que diga:
url = "http://local-bay.contacts.msn.com/abservice/abservice.asmx"

4. Iniciar Empathy normalmente y continuar con tu vida xD

miércoles, 28 de enero de 2009

Acerca de...

Inspirado en tres fuentes básicas, inicio este blog como un cuaderno de notas compartido, dirigido a mí mismo, pero también a quien llega aquí buscando las mismas respuestas que yo tuve que encontrar a pedacitos, en idiomas ajenos a mi nacionalidad, después de largas esperas, con el hilo de la esperanza a punto de reventar.

Narré el inicio de esta historia en A Volar, ahora son ya 18 meses de haberme sumado seria y comprometidamente al mundo del Software Libre, de aprender de la comunidad, de beneficiarme con las miles de ventajas que me ofrece este mundo virtual que se proyecta en mi realidad (y en la de millones más) día a día, demostrando que la cultura (y todo lo que de ella se deriva) vive y se desarrolla mejor cuando se comparte.

En Circuitos Viciosos publicaré soluciones... ¿A qué? A aquellos obstáculos que me han sido particularmente difíciles de vencer antes de sentirme completamente satisfecho con la forma en que uso mis dispositivos electrónicos, en especial en torno a mi porátil, una Dell Inspiron 640m que ha sabido durar y adaptarse a Ubuntu, el sistema operativo libre (o casi) que elegí para aprender a hacer mía (y de la comunidad) la informática con la que trabajo.

Mucho de lo que aquí escriba, serán síntesis (en el sentido de integración) de lo encontrado en diferentes espacios con fines similares a éste... Tomar en cuenta que para resolver un problema a veces he tenido que buscar en más de 100 sitios diferentes y armar el rompecabezas. Supongo que habrá por lo menos 100 personas más que han compartido mis obstáculos y que quizás los sigan compartiendo, así que espero que aquí encuentren soluciones en su idioma y sin tener que buscar mucho más. De entrada sé que puede resultar de interés para algunos de mis "evangelizados" que se inician en el uso de Ubuntu, Firefox, OpenOffice.org, Gimp...

Por ahora no pretendo hablar de lo que no uso, en primer lugar este espacio es un memoria para mí, para ayudarme a aprender y en segundo, para ayudar a quien llegue hasta aquí y encuentre las respuestas que busca. No soy informático, es más, en el plano profesional me ubico en el área de las humanidades, así que no puedo ofrecer más que lo que mi afición me posibilita y, eso sí, un punto de vista y una comunicación menos técnica y más humana.

Las tres fuentes de inspiración de las que hablé al principio explican el por qué de "Circuitos Viciosos":
  1. El nombre está inspirado en la canción "Círculos Viciosos" de Joaquín Sabina, debido a que en momentos me he sentido en uno de esos círculos buscando hacer funcionar las cosas en mis aparatos: especialmente en los foros, muchos solemos preguntar la solución a un problema y, después de una larga discusión, volvemos a la pregunta inicial.
  2. El gusto por compartir lo que aprendo viene de la filosofía que hay detrás del Software Libre.
  3. La forma en que intentaré (siempre que me dé tiempo) explicar las soluciones, viene de mi profesión... Ojalá se adivine.
Elegí una de las plantillas más simples de "Blogger"porque ya invertí suficiente tiempo en personalizar mi otro blog (más poético y menos didáctico), y aquí me concentraré más en darle forma a los contenidos para que sean sencillos de seguir.

El espacio para comentarios queda abierto y, aunque no puedo comprometerme a responder dudas, espero poder hacerlo de vez en cuando.