ON/OFF Button Raspberry Pi
Botón físico para encender y apagar cualquier Raspberry Pi
Not neccesary on Pi 5 😂
Conexión:
Código:
Abrimos la Terminal y escribimos:
cd
nano off.sh
En el escribimos:
Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x.
Ahora debemos agregar permiso de ejecución a nuestro script y agregar el comando de ejecución a rc.local:
chmod +x off.sh
Abrimos rc.local:
sudo nano /etc/rc.local
Colocamos el comando justo encima de exit 0(cero):
sudo sh $HOME/off.sh
Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x.
Tras realizar esto apagamos la Raspberry Pi, realizamos la conexión sin ningún cable conectado a ella. chequeamos 2 veces la correcta conexión y encendemos nuevamente. El Script estará funcionando siempre esperando que presionemos el botón para apagarla, el encendido se da solo si no hemos desenchufado la fuente de alimentación y al presionar el botón se encenderá por simple electrónica.
En caso de estar ocupado el GPIO 3:
Si usas un HAT o tienes ocupado el GPIO 3 con otro dispositivo, ejempo IQAudio DAC+ utiliza I2C, por ende GPIO 3. Entonces puedes cambiar al GPIO 5 pero el botón solo servirá de Apagado.
Soft Button:
Creamos un acceso directo en nuestro escritorio y podemos apagar directamente con doble clic la Raspberry Pi. Abrimos la Terminal:
cd $HOME/Desktop
nano softOff.desktop
En el Escribimos:
[Desktop Entry]
Type=Application
Name=Shutdown
Icon=$HOME/Desktop/off.png
Exec=sudo shutdown -h now
Categories=Application;
Terminal=true
Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x.
Para que no nos pregunte donde queremos ejecutar el acceso directo, activamos la opción:
No mostrar opciones al abrir archivos ejecutables
Esta opción la encontramos en PcManFM, nuestro Explorador de Archivos en Raspberry Pi OS. Vamos a a Editar --> Preferencias --> General y ahí la encontraremos sin el tilde. Tildamos y cerramos el Explorador. Ahora Reiniciamos nuestro Sistema. al reiniciar veremos que con un simple doble clic, el sistema se apagará. Pero no tendrá logo, para esto bajamos una imagen en formato .PNG que nos guste y la colocamos en $HOME/ con el nombre que queramos, en este tutorial se llama off.png, si le cambias el nombre edita ese dato en Icon.
Método Opcional:
También podemos enviar el logo a la ruta adecuada dónde se encuentran los logos del sistema, así como el acceso directo, dónde se encuentran los accesos directos, esto es optativo, haces el mismo procedimiento pero así:
Movemos el logo:
sudo mv $HOME/off.png /usr/share/pixmaps/
Creamos el archivo .desktop en:
sudo nano /usr/share/applications/softOff.desktop
En el Escribimos:
[Desktop Entry]
Type=Application
Name=Shutdown
Icon=off
Exec=sudo shutdown -h now
Categories=Application;
Terminal=true
Guardamos con Ctrl+o(Vocal O), confirmamos con Enter y cerramos el archivo con Ctrl+x. Reiniciamos y veremos el acceso en el Menu, solo nos queda arrastrarlo al escritorio.
Utilidad para los que poseen varias Raspberry Pi y desean apagar todas a la vez con un botón físico y el protocolo SSH:
Código:
Abrimos la Terminal y escribimos:
cd
nano sshoff.sh
En el escribimos:
Para esto debemos crear en la Raspberry Pi que poseerá el botón, las claves SSH para que las demás Raspberry Pi no nos soliciten contraseña al loguearnos por SSH al pulsar el botón, abrimos la Terminal y escribimos:
ssh-keygen
Presionamos Enter las 3 veces y si nos consulta si queremos sobre-escribir la ya creada le indicamos que si.
Repetimos este paso para nuestro usuario root ya que el script lo vamos a ejecutar con sudo:
sudo ssh-keygen
Presionamos Enter las 3 veces y si nos consulta si queremos sobre-escribir la ya creada le indicamos que si.
Una vez creadas ambas claves debemos enviarlas a las Raspberry Pi de destino:
ssh-copy-id pi@raspberry.local
sudo ssh-copy-id pi@raspberry.local
En ambos casos nos pedirá una confirmación de conexión y la contraseña, respondemos con yes y raspberry si es Pi OS o RetroPie o cualquier sistema basado en Debian cuyo usuario sea pi y su contraseña por defecto sea raspberry. de no serlo, colocamos la contraseña adecuada. tras esto nos indicará que intentemos conectarnos para probar que hemos copiado bien la clave, con lo cual veremos que no nos pide contraseña:
ssh pi@raspberry.local
exit
sudo pi@raspberry.local
exit
Si todo fue bien realizado, no nos pedirá nada y habremos conectado por ssh sin poner contraseña.
En la segunda Raspberry Pi:
Ahora copiamos las claves a la otra Raspberry Pi, en este ejemplo y si tus Raspberry Pi poseen el mismos hostname debemos cambiárselo a una, en este caso se lo cambiamos a la Raspberry Pi Zero que tiene un Sistema Operativo basado en Debian cuyo usuario es pi y su contraseña es raspberry. Para ello abrimos raspi-config:
sudo raspi-config
Opción 1 Systems Options
Opción S4 Hostname
escribimos zero y Aceptamos
Cerramos raspi-config yendo a la opción Finish y reiniciando para que el cambio surta efecto.
Procedemos a copiar las claves:
ssh-copy-id pi@zero.local
sudo ssh-copy-id pi@zero.local
En ambos casos nos pedirá una confirmación de conexión y la contraseña, respondemos con yes y raspberry si es Pi OS o RetroPie o cualquier sistema basado en Debian cuyo usuario sea pi y su contraseña por defecto sea raspberry. de no serlo, colocamos la contraseña adecuada. tras esto nos indicará que intentemos conectarnos para probar que hemos copiado bien la clave, con lo cual veremos que no nos pide contraseña:
ssh pi@zero.local
exit
sudo pi@zero.local
exit
Si todo fue bien realizado, no nos pedirá nada y habremos conectado por ssh sin poner contraseña.
NOTA: Acerca del uso de hostname.local, esto nos evita indicar una IP que puede variar con el tiempo o simplemente nos evita configurar una IP estática, al poseer el Sistema basado en Debian por lo general el demonio Avahi-daemon, esto nos permite realizar eso, para los que poseen Iphone o Mac esto es común, para los que usamos Android no, ya que nosotros debemos indicar siempre la IP correcta para poder establecer la conexión, pero esto es solo entre Android y Raspberry, como la comunicación en este caso se dá entre Raspberries, se puede utilizar esta técnica.
En otos sistemas:
Respecto a otros sistemas solo debemos conocer estos datos:
Usuario. Contraseña, Hostname y la presencia de Avahi-daemon o que podamos agregarlo a él. De no poder crearemos todo con la IP correcta. Ejemplo para Recalbox.
Recalbox:
Usuario : root
Contraseña: recalboxroot
hostname: recalbox
Avahi-daemon: Si
Como podemos observar el usuario es diferente, y más aún, es el root, lo que nos evita indicar sudo para poder apagar la Raspberry Pi.
Copiamos la clave:
ssh-copy-id root@recalbox.local
sudo ssh-copy-id root@recalbox.local
Repondemos yes y la contraseña recalboxroot
Y en nuestro Script modificaremos la linea que le corresponda, supongamos que es la Raspberry Pi que en el Script de arriba tenía una de las conexiones con pi@raspberry.local, entonces el código quedaría:
#!/bin/bash
# Indicamos el pin GPIO que recibe el cambio de estado para el apagado
GPIOpin1=3
echo "$GPIOpin1" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction
while true; do
sleep 1
power=$(cat /sys/class/gpio/gpio$GPIOpin1/value)
if [ $power != 1 ]; then
echo "out" > /sys/class/gpio/gpio$GPIOpin1/direction
echo "0" > /sys/class/gpio/gpio$GPIOpin1/value
sleep 3
ssh 'root@recalbox.local' 'shutdown -h now'
sleep 3
ssh 'pi@zero.local' 'sudo shutdown -h now'
sleep 3
sudo shutdown -h now
fi
done
Eso es todo, esta última utilidad tal vez no sea para la mayoría pero surge de una consulta para un Arcade con Jukebox con los Sistemas RetroPie y Max2play.