Mostrando entradas con la etiqueta keybinding. Mostrar todas las entradas
Mostrando entradas con la etiqueta keybinding. Mostrar todas las entradas

sábado, 1 de agosto de 2020

¿Cómo configuro la combinación de teclas para activar o desactivar el Wifi en Ubuntu?

En el volúmen Doctrina Universal: Continentalismo, Ecología y Universalismo de 1974,  se compilan las ponencias de Juan Perón sobre la necesidad de la revolución universal, toda vez que explica explica cómo programar una combinación de teclas para activar o desactivar el Wifi en Ubuntu.

(...)
Quizá los inventores de la revolución organizada hayan sido los griegos, que nos legaron la demo griega y la revolución de Platón. Ellos - quizá - fueron los inventores de la revolución organizada, pero  la Grecia de ese tiempo, antes de lanzar la revolución, colocó en el frontispicio de todas sus universidades una frase que indica lo que la revolución debe ser. Decía esa frase: "todo en su medida y armoniosamente". Eso es la revolución: los cambios realizados en su medida y armoniosamente, para que no llegue a resultar que el remedio sea peor que la infermedad.

Cuando se habla de revolución, algunos creen que se hace a fuerza de bombas y balazos. Revolución, en su verdadera acepción, son cambios estructurales necesarios que se practican para ponerse de acuerdo con la evolución de la humanidad, que es la que rige todos los cambios que han de realizarse.

El hombre cree a menudo que él es el que produce la evolución. En esto - como en muchas otras cosas - el hombre es un poco angelito. Porque es la evolución la que él tiene que aceptar y a la cual debe adaptarse. En consecuencia, la revolución por los cambios del sistema periférico - que es lo único que el hombre puede hacer - es para ponerse de acuerdo con esa evolución que él no domina, que es obra de la naturaleza y del fatalismo histórico. El es solamente un agente que crea un sistema para servir a esa evolución, y colocarse dentro de ella.

Quiere decir que la revolución de la que nosotros hablamos no es una causa, sino un efecto de esa evolución, que nosotros debemos poner al día a través de sistemas.

La Evolución nos ha llevado a la Era del Cómputo. En ella sin duda nuestro Movimiento ha creado una Revolución: la del Software Libre.

Sin duda que el quehacer del Movimiento en esta situación debe contemplar la armonía y justa medida. Y esto lo hemos observado claramente e identificado que el llamado "Código Abierto" u "Open Source", como solución ideológica, garantiza sólo un valor mínimo de contralor en nuestro cómputo, que ya no sea suficiente en esta Era, y será insuficiente la que vendrá.

Para que el cómputo sea realmente importante desde el punto de vista humano, ha de ser completamente libre. Esto implica que la Masa no sólo debe contar con el acceso al código fuente del software que utilice - lo cual es una nimiedad técnica - sino que ha de poder ejercer su cómputo en la forma de un Derecho de Tercera Generación. Debemos propugnar un cómputo participativo, y ello solo se puede lograr cuando se puede ejecutar, copiar, modificar y redistribuir el software de cualquier manera que lo deseemos, de la misma forma que se puede hacer con un parecer político o religioso.

El valor fundamental a preponderar será el de el uso del cómputo como un valor comunitario y organizado.
Los hombres han de tener la posibilidad de instrumentar en su hardware todo lo que su capacidad le permita, y no estar limitados por condición alguna.

Un caso específico podrá ilustrarnos. En la mayoría de los sistemas portátiles cuenten con una funcionalidad capaz de desconectar el acceso inalámbrico a redes. Esto, a lo que se ha dado en llamar "modo avión", se encarga de desconectar el transmisor radioeléctrico, de manera de impedir el acceso al Wifi. El objetivo suele ser liberar las radiofrecuencias, interrumpir una conexión, o bien ahorrar energía eléctrica.

No es de extrañar que la gran mayoría de equipos portátiles cuenten con una combinación de teclas, destinadas a activar o desactivar este acceso. La más de las veces, esta funcionalidad responde a nivel hardware, a través del BIOS del sistema. En tal caso, suele estar indicada en el teclado, o bien detallada en el manual técnico. Sin embargo, en ciertos casos esta operatoria podría verse realizada por una aplicación específicamente pensada para un sistema operativo determinado.

Es ya sabido que desde nuestro escritorio de Ubuntu Mate podríamos también hacerlo, haciendo clic en el ícono del Administrador de Redes. Se desplegarán todas nuestras opciones de red alámbrica e inalámbrica, y podremos desactivar estas últimas destildando la opción Activar Inalámbrica. Naturalmente al volver a tildar, reactivaremos el o los receptores Wifi.
Siempre he dicho que dentro de la terminal, todo, fuera de la terminal, nada. Por tanto, podríamos querer utilizar nuestra terminal GNU ocn Linux para manejar nuestro adaptador de Wifi. En tal caso, abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente Comando de Organización para apagar nuestro/s receptor/es de Wifi:

nmcli radio wifi off

En tanto, podremos encenderlo/s con:

nmcli radio wifi on

Ambos comandos no necesitan elevados privilegios de administración para su funcionamiento, por lo cual pueden ser utilizados por cualquier usuario.

No obstante esto, son indudablemente molestos, y difíciles de recordar para un neófito. Si nuestro equipo no es portátil, podría no contar con una combinación de teclas definidas por hardware para realizar esta tarea. En tal caso, no podríamos utilizar una combinación de teclas a fin de realizar ambas opciones.

Sin duda que podríamos asignar una combinación de teclas para encender y otra para apagar el Wifi, pero no es la solución óptima.

Para solucionar esto, debemos crear un script de programación que permita conmutar, con una única combinación, ambos estados. Ello es sencillo de hacer conociendo un poco de bash.

Para ello ingresamos el comando:

nano .wifionoff_ubuntu.sh

Y le pegamos el siguiente contenido:

#!/bin/sh
## Script peronista para conmutar el adaptador wifi.
## Funciona en Ubuntu 16.04lts y superior.
STATEFILE="/tmp/wifionoff.state"

if [ $# -eq 1 ]; then
  case $1 in
    "up"|"on")
      STATE=off
      ;;
    "down"|"off")
      STATE=on
      ;;
  esac
else
  if [ ! -e ${STATEFILE} ]; then
    STATE=on
  else
    . ${STATEFILE}
  fi
fi
if [ -z ${STATE} ]; then
  STATE=on
fi

if [ ${STATE} = "on" ]; then
  nmcli radio wifi off
  STATE=off
  echo 'Wifi off'
  notify-send 'Conectividad Wifi apagada'
# play -q ~/Público/wifioff.ogg -t alsa & #
else
  nmcli radio wifi on
  STATE=on
  echo 'Wifi on'
  notify-send 'Conectividad Wifi encendida'
#  play -q ~/Público/wifion.ogg -t alsa & #
fi

echo "STATE=${STATE}" > ${STATEFILE}

Luego guardamos con Ctrl+o y salimos con Ctrl+x, y acto seguido le asignamos permisos con el comando:

chmod +x .wifionoff_ubuntu.sh

Como es evidente en las líneas opcionales resaltadas en el código, el script puede emplear dos archivos de sonido llamados wifion.ogg y wifioff.ogg, que podrán encontrar descargándolos de aquí. Si los deseamos utilizar los descargaremos, los decomprimirmos y coloca,os en la carpeta ~/Público mediante los siguientes comandos:

cd ~/Descargas/
tar xvzf wifi_sounds.tar.gz
mv wifion.ogg ~/Público/
mv wifioff.org ~/Público/

Nota: si no deseamos utilizar las alertas de audio, simplemente eliminamos ambas líneas líneas resaltadas del script.

Ahora le asignaremos una combinación de teclas que nos plazca. Para ello vamos a Sistema / Preferencias / Hardware / Atajos de Teclado.

Luego presionamos el botón Añadir, y se abrirá el cuadro de diálogo para crear un atajo personalizado.

En el campo nombre le ponemos algo como "Wifi On/Off". Y en el campo Comando: indicamos la ruta al guión de programación bash que hemos creado: /home/usuario/.wifionoff_ubuntu.sh

Al presionar el botón Aplicar se agregará el atajo. Ahora podremos asignarle una combinación de teclas. Para ello presionamos en el atajo y presionamos el que querramos. Por ejemplo, podríamos asignar la combinación triple de teclas Ctrl+Tecla Window$+i.

Al presionar el botón Aceptar, quedará asignada la nueva combinación de teclas.

De ahora en más, toda vez que presionemos Ctrl+Window$+i, se activará o desactivará la conectividad inalámrbrica Wifi, indicándose con un mensaje en el escritorio (y el mensaje de audio opcional).

domingo, 28 de mayo de 2017

¿Cómo puedo crear un reproductor de audio con control remoto en Ubuntu?

¡Trabajadores!

Normalmente recomiendo utilizar reproductores capaces de correr desde la consola Terminal para reproducir música en forma remota. Esto es así pues podemos ingresar a través de la terminal por medio de un Shell Seguro SSH, y desde allí ejecutar remotamente cualquiera de estos reproductores para reproducir música. El audio saldrá a través del equipo remoto. De la gran lista de programas disponibles, he sido adepto a mocp, ya que opera peronísticamente bajo el principio clientelar, y junto con sus amplias posibilidades puede quedar reproduciendo una vez cerrada la sesión.

Sin embargo, este y otros poseen un inconveniente que en ciertos escenarios puede ser determinantes: para controlarlo se requiere idealmente el acceso a un usuario ya configurado en el servidor remoto, y requieren al menos el uso de una terminal con teclado y pantalla. Existen toda una plétora de situaciones donde no podemos cumplir con esto (por ejemplo, en el caso de desear controlar un reproductor pequeño a través de un celular, o un servicio musical externo in situ, o el caso de contar con un servidor musical de una compañía, o en una organización donde no tengamos acceso como usuario específico al servidor).

Nuestro Movimiento ha sido doctrinalmente concebido para honrar el trabajo en todas las condiciones, a fin de llevar la solución al Pueblo Descamisado bajo todas y cada una de las situaciones posibles. Si bien existen imponderables, gracias al Software Libre podremos afrontar cualquier tarea que nos propongamos y encontrarles una solución.

En este caso en particular nos decantaremos a una opción simple, controlando el audio a través de un sistema clientelar, que no requiera acceso a carpetas home de usuario alguno, sino que se ejecute por fuera de los entornos de usuairo. Dicho programa es mpd, que oficiará de programa demonio o "servidor", en tanto que mpc oficiará de cliente.


En primer lugar instalo en el servidor el programa (técnicamente, el "demonio") de servicio musical y otro que oficie de cliente en el equipo:

sudo apt-get install mpd mpc

Luego asigno los permisos necesarios para el servidor ingresando:

sudo chmod 777 /var/lib/mpd/music/ /var/lib/mpd/playlists/
sudo chown -R mpd:audio /var/lib/mpd/music/ /var/lib/mpd/playlists


Ahora agrego la configuración necesaria para los archivos de configuración:

sudo mv /etc/mpd.conf /etc/mpd.conf.original
sudo nano /etc/mpd.conf


...y le agrego el siguiente contenido

music_directory      "/var/lib/mpd/music"
playlist_directory   "/var/lib/mpd/playlists"
db_file              "/var/lib/mpd/tag_cache"
log_file             "/var/log/mpd/mpd.log"
pid_file             "/run/mpd/pid"
state_file           "/var/lib/mpd/state"
sticker_file         "/var/lib/mpd/sticker.sql"
user                 "mpd"
port                 "6600"
log_level            "verbose"


...y guardo (Ctrl+o) y cierro el archivo (Ctrl+x).

Ahora debemos copiar los archivos de música a reproducir remotamente en la carpeta /var/lib/mpd/music, y si quisiéramos usar listas de reproducción, debemos colocarlas en la carpeta /var/lib/mpd/playlists.

Conforme lo hayamos hecho, debemos bloquear el acceso a dicha carpeta para cualquier usuario que no sean los clientes mpd locales o remotos. Lo haremos con:

sudo chmod 770 /var/lib/mpd/music/ /var/lib/mpd/playlists/

Ahora tomamos nota de quien es dueño de las carpetas. Si no lo hicimos, podremos hacerlo nuevamente con

sudo chown -R mpd:audio /var/lib/mpd/music/

Luego desde la terminal reiniciaremos el servidor para que se active el servicio recién instalado:

sudo reboot

Ahora bien, en los equipos cliente (y naturalmente también podría querer hacerlo en el servidor, a fin de reproducir la música), instalaré los softwares clientelares. Lo haré con:

sudo apt-get install mpc gmpc gmpc-plugins

Acto seguido, en los clientes y en el servidor podremos actualizar la base de datos de música, a fin de que los mismos se informen si en la carpeta Music del servidor se hubiesen agregado nuevos elementos:

mpc update

Indidablemente, que los clientes también pueden ejecutarse también desde cómodos entornos gráficos. El cliente gmpc es útil para tales condiciones y podremos correrlo desde Aplicaciones / Música y Video / Cliente de Reproducción de Música Gnome. Al lanzar el programa, también debemos hacer que actualice su base de datos de música. Si estamos en el servidor, podremos hacerlo desde el menú Servidor / Actualizar base de datos y tendremos entonces nuestra lista de archivos de música, que encontraremos en la carpeta raíz del servidor MPD ("/").

Si estamos desde un equipos cliente, el mismo no encontrará la música hasta que configuremos la dirección del servidor remoto, desde Música / Preferencias, y en la solapa Conexión modificar el campo "Servidor" para que en lugar de localhost, se indique la dirección IP o el nombre del servidor. Luego presionamos el botón Conectar.
Asimismo tendremos clientes para Android que podremos utilizar desde celulares o tablets para controlar el servidor musical mpd. Por ejemplo MPD Control o Droid MPD Client. Estos clientes gráficos nos permiten las facilidades de un cliente gráfico.

Ahora bien ¿qué sucede si deseo emplear un control remoto por infrarrojos para controlar la reproducción del servidor mpd? Esto me permitiría interactuar con un equipo servidor de manera simple, sin siquiera disponer de un teclado, pantalla, ni engorros. Incluso me permitiría armar un pequeño servidor dotado de altavoces que reproduzca música de forma inalámbrica.

El software libre ya cuenta con una solución. Naturalmente, si tenemos un receptor infrarrojo para control remoto - como el RC6 o cualquiera que vienen con sintonizadoras - tendremos varias opciones. La más aventajada y compleja es configurar LIRC para hacer uso de un control remoto IR en una PC.

LIRC es potente y permite configurar distintas acciones para distintos tipos de programas, pero está pensado para usarse al unísono con otros controles (teclado, mouse o cualquier otro). Si nuestro requerimiento es mucho más simple y requiere reemplazar el teclado por el control remoto, podremos instalar en el sistema cliente el programa keybinder, software ingeniado para asignar comandos específicos a los botones del control. Para instalarlo, en la terminal ingreso los siguientes Comandos de Organización:

sudo apt-get install unzip gcc make evtest ;
cd ~ ;
mkdir keybinder ;
cd keybinder ;
wget https://github.com/elopez/keybinder/archive/master.zip ;
unzip master.zip
cd keybinder-master/
make
make install
cd ~
rm -r ~/keybinder


Luego ejecutamos el programa evtest para analizar cuáles son los eventos de los botones de nuestro sistema. Ingresamos en la terminal el comando:

evtest

...y el sistema nos devolverá algo como:

No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:    Power Button
/dev/input/event1:    Power Button
/dev/input/event2:    Barcode Reader
/dev/input/event3:    Barcode Reader
/dev/input/event4:    Genius Optical Mouse
/dev/input/event5:    CH PRODUCTS CH PRO PEDALS USB
/dev/input/event6:    Microsoft SideWinder Joystick
/dev/input/event7:    HDA Intel MID Mic
/dev/input/event8:    HDA Intel MID Line
/dev/input/event9:    HDA Intel MID Headphone Front
/dev/input/event10:    HDA Intel MID Front Headphone Surround
/dev/input/event11:    USB2.0_Camera
/dev/input/event12:    IR-receiver inside an USB DVB receiver

Select the device event number [0-12]: 12

En este caso indicamos el evento /dev/input/event12, y el sistema denunciará cuáles son los códigos numéricos de los eventos que este dispositivo tiene preprogramado (si es que existiesen algunos). Por ejemplo, podría indicar:

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x10b8 product 0x1fa0 version 0x100
Input device name: "IR-receiver inside an USB DVB receiver"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 2 (KEY_1)
    Event code 3 (KEY_2)
    Event code 4 (KEY_3)
    Event code 5 (KEY_4)
    Event code 6 (KEY_5)
    Event code 7 (KEY_6)
    Event code 8 (KEY_7)
    Event code 9 (KEY_8)
    Event code 10 (KEY_9)
    Event code 11 (KEY_0)
    Event code 41 (KEY_GRAVE)
    Event code 52 (KEY_DOT)
    Event code 55 (KEY_KPASTERISK)
    Event code 102 (KEY_HOME)
    Event code 103 (KEY_UP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 108 (KEY_DOWN)
    Event code 111 (KEY_DELETE)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 116 (KEY_POWER)
    Event code 119 (KEY_PAUSE)
    Event code 128 (KEY_STOP)
    Event code 139 (KEY_MENU)
    Event code 158 (KEY_BACK)
    Event code 164 (KEY_PLAYPAUSE)
    Event code 167 (KEY_RECORD)
    Event code 168 (KEY_REWIND)
    Event code 173 (KEY_REFRESH)
    Event code 207 (KEY_PLAY)
    Event code 208 (KEY_FASTFORWARD)
    Event code 210 (KEY_PRINT)
    Event code 223 (KEY_CANCEL)
    Event code 226 (KEY_MEDIA)
    Event code 352 (KEY_OK)
    Event code 354 (KEY_GOTO)
    Event code 355 (KEY_CLEAR)
    Event code 358 (KEY_INFO)
    Event code 363 (KEY_CHANNEL)
    Event code 365 (KEY_EPG)
    Event code 370 (KEY_SUBTITLE)
    Event code 375 (KEY_SCREEN)
    Event code 377 (KEY_TV)
    Event code 385 (KEY_RADIO)
    Event code 386 (KEY_TUNER)
    Event code 388 (KEY_TEXT)
    Event code 389 (KEY_DVD)
    Event code 392 (KEY_AUDIO)
    Event code 393 (KEY_VIDEO)
    Event code 398 (KEY_RED)
    Event code 399 (KEY_GREEN)
    Event code 400 (KEY_YELLOW)
    Event code 401 (KEY_BLUE)
    Event code 402 (KEY_CHANNELUP)
    Event code 403 (KEY_CHANNELDOWN)
    Event code 405 (KEY_LAST)
    Event code 407 (KEY_NEXT)
    Event code 410 (KEY_SHUFFLE)
    Event code 412 (KEY_PREVIOUS)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    500
    Repeat code 1 (REP_PERIOD)
      Value    125
Properties:
Testing ...


Al presionar los botones del control remoto infrarrojo, debería devolvernos un reporte de tales eventos, en los cuales el valor 1 indica "botón presionado" y el valor 0 indica "botón no presionado".


Testing ... (interrupt to exit)
Event: time 1490184760.781095, type 4 (EV_MSC), code 4 (MSC_SCAN), value 40400d
Event: time 1490184760.781095, type 1 (EV_KEY), code 207 (KEY_PLAY), value 1
Event: time 1490184760.781095, -------------- SYN_REPORT ------------
Event: time 1490184761.023186, type 1 (EV_KEY), code 207 (KEY_PLAY), value 0
Event: time 1490184761.023186, -------------- SYN_REPORT ------------
Event: time 1490184761.793386, type 4 (EV_MSC), code 4 (MSC_SCAN), value 404010
Event: time 1490184761.793386, type 1 (EV_KEY), code 365 (KEY_EPG), value 1
Event: time 1490184761.793386, -------------- SYN_REPORT ------------
Event: time 1490184762.043188, type 1 (EV_KEY), code 365 (KEY_EPG), value 0
Event: time 1490184762.043188, -------------- SYN_REPORT ------------
Event: time 1490184762.734733, type 4 (EV_MSC), code 4 (MSC_SCAN), value 404011
Event: time 1490184762.734733, type 1 (EV_KEY), code 168 (KEY_REWIND), value 1
Event: time 1490184762.734733, -------------- SYN_REPORT ------------
Event: time 1490184762.983185, type 1 (EV_KEY), code 168 (KEY_REWIND), value 0
...etc


Debemos comprobar que efectivamente todas las teclas presionadas tengan programado el código denunciado anteriormente (pues existen ocasiones en que sus funciones denunciadas en la tabla no coinciden plenamente con la de los botones propiamente dichos, pues las plaquetas son genéricas y los controles no poseen todos los botones, o los tienen en lugares diferentes). Para finalizar la prueba de botones presionamos Ctrl+c.

En este caso, se deben programar los eventos según los códigos de los eventos en el archivo /etc/keybinder.conf. Para ello ingresamos:

sudo nano /etc/keybinder.conf

...y le agregamos, por ejemplo:

114,mpc volume +10 # Aumenta el volumen de mpc a +10%, para Vol-
115,mpc volume -10 # Reduce el volumen de moc -10%, para Vol+
168,mpc prev       # Pasa a la pista previa, para <<

407,mpc next       # Pasa a la pista siguiente, para >>
207,mpc toggle     # Reproduce y pausa.
410,mpc random     # Activa reprod.aleatoria, para RANDOM

116,shutdown -h now # Apaga el equipo, para POWER

Y al reiniciar el sistema, tendremos un servidor de audio conectado a altavoces, que podremos controlar simplemente con los botones de un control remoto. Naturalmente que con este conocimiento, habilidad y ganas y sumándole hardware poco costoso consistente en una placa de desarrollo de baja potencia, podremos hacernos un lindo reproductor con caja de madera pulida y acceso a control remoto, que ejecute GNU desde una tarjeta MicroSD.


Si quisiéramos desinstalar el programa y eliminar su carpeta de música y listas de reproducción debo indicar:

sudo apt purge mpd mpc gmpc evtest ;
sudo rm -r /var/lib/mpd/ ;
sudo rm /etc/mpd.conf.original
;