
Me preguntaba si es posible configurar perfiles para mi computadora portátil Ubuntu de modo que:
- Deshabilite apache/mysql/postgresql si se ejecuta en modo batería
- Deshabilite todos los procesos que intentan conectarse a Internet, si la conexión inalámbrica está deshabilitada.
Respuesta1
No me había encontrado antes con el concepto de un perfil de este tipo en Ubuntu, así que supongo que no se puede hacer esto de inmediato.
Podría equivocarme al suponer esto, lo cual sería bueno. Sin embargo, suponiendo que no haya una aplicación para hacer esto y que tuviera un fuerte deseo de configurarlo, ahora lo haría.
Voy a escribir esto asumiendo que estás ejecutando Gnome, ya que ese es el entorno que mejor conozco. El flujo de proceso subyacente aún debería ser válido si se encuentra en algún otro entorno de escritorio o consola.
Gnome le permite configurar algunos aspectos del comportamiento del sistema a través deSistema > Preferencias > Administración de energía. esto llamapreferencias-de-poder-de-gnome, y es ejecutado por eladministrador-de-energía-gnomeproceso demonio. Desde la página del proyecto gnome sabemos queadministrador-de-energía-gnomeDepende de HAL saber si la computadora portátil está funcionando con batería.
Entonces, enciendeadministrador-de-dispositivos-gnomepara ver qué sabe HAL. Encuentra la entrada parabatería. Si solo ve una pestaña de resumen, habilítelaVer > Propiedades del dispositivo. Sí, existen las dos claves que necesitamos:batería.recargable.está_descargandoybatería.recargable.está_cargando
Ahora que sabemos lo que necesitamos, tenemos que descubrir cómo acceder a él a través de la línea de comando. Afortunadamente, HAL viene con herramientas de línea de comandos para acceder a esta información. primero corremos
hal-dispositivo | menos
y buscar elbatería.recargable.está_descargandollave. Haga una copia de seguridad para obtener el bloque que detalla la información de su batería:
56: udi = '/org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0'
linux.subsystem = 'power_supply' (string)
info.capabilities = { 'battery' } (string list)
info.subsystem = 'power_supply' (string)
info.product = 'DELL CC1546' (string)
info.udi = '/org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0' (string)
battery.type = 'primary' (string)
battery.reporting.technology = 'Li-ion' (string)
battery.technology = 'lithium-ion' (string)
battery.model = 'DELL CC1546' (string)
battery.vendor = 'Panasonic' (string)
battery.voltage.design = 11100 (0x2b5c) (int)
battery.voltage.unit = 'mV' (string)
battery.reporting.design = 4700 (0x125c) (int)
battery.reporting.unit = 'mAh' (string)
battery.serial = '1076' (string)
battery.present = true (bool)
battery.voltage.current = 12712 (0x31a8) (int)
battery.reporting.rate = 2765 (0xacd) (int)
battery.is_rechargeable = true (bool)
battery.rechargeable.is_charging = true (bool)
battery.rechargeable.is_discharging = false (bool)
battery.reporting.current = 3407 (0xd4f) (int)
battery.reporting.last_full = 3963 (0xf7b) (int)
battery.charge_level.current = 37817 (0x93b9) (int)
info.parent = '/org/freedesktop/Hal/devices/computer' (string)
linux.sysfs_path = '/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0' (string)
battery.charge_level.design = 52170 (0xcbca) (int)
battery.charge_level.percentage = 85 (0x55) (int)
battery.remaining_time = 723 (0x2d3) (int)
battery.charge_level.rate = 30691 (0x77e3) (int)
battery.charge_level.last_full = 43989 (0xabd5) (int)
info.category = 'battery' (string)
linux.hotplug_type = 2 (0x2) (int)
Nota laudidel dispositivo. Ahora, consulta la propiedad que deseas usando elhal-get-propiedaddominio:
$ hal-get-property --udi /org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0 --key "battery.rechargeable.is_discharging"
true
Ahora que sabemos cómo acceder al estado de la batería, inserte esto en un script tipo demonio. A continuación se muestra una plantilla básica que toma el intervalo de sondeo como primer parámetro. Puedes imaginarlo con la verificación de errores y otras construcciones interesantes en tu tiempo libre:
#!/usr/bin/env perl
my ($sleep_duration) = @ARGV;
print "Sleep:$sleep_duration\n";
do{
my $status = qx(hal-get-property --udi /org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0 --key "battery.rechargeable.is_discharging");
if ($status =~ /true/)
{
print "On battery power\n";
# shut down apache
# shut down mysql
# shut down postgresql
}
sleep $sleep_duration;
} while (true);
Dentro del script, debes usar los scripts de inicio para cerrar mysql limpiamente, etc.
sudo /etc/init.d/mysqld detener
¿Cómo podemos mejorar esto? Una vez que haya ejecutado esto por un tiempo y haya solucionado todos los problemas, conviértalo en un servicio que se inicie en el arranque. revisa esta respuestaaquípara obtener instrucciones sobre cómo agregar un script para que se inicie automáticamente durante el arranque.
Si decides no hacer esto, marca estopreguntapara obtener instrucciones sobre cómo permitir que este script ejecute comandos que requieren permisos de root.
Me doy cuenta de que solo respondí una parte de tu pregunta, pero deberías poder incorporar la sección inalámbrica de manera similar. Utilice HAL para saber cuándo la conexión inalámbrica está desactivada.
No estoy exactamente seguro de cómo verificar y deshabilitar todos los procesos que intentan conectarse a la red, pero los siguientes comandos pueden ayudarlo con esa tarea:
# list all processes using port 80
lsof -i tcp:80
#list programs connected via tcp
#include -u to include udp connections
sudo netstat -ntp
Respuesta2
laptop-mode-tools
puede hacer lo que estás pidiendo.
/etc/laptop-mode/conf.d/start-stop-programs.conf El módulo start-stop-programs le permite iniciar o detener programas cuando la computadora cambia a un estado de energía diferente. CONTROL_START_STOP Si esta opción está habilitada, las herramientas del modo portátil se activarán automáticamente. iniciar y detener automáticamente demonios u otros programas por usted. El configuración real de qué demonios se van a utilizar detenido/iniciado se realiza colocando enlaces al inicio de los demonios scripts en los siguientes directorios: /etc/modo-portátil/batt-start /etc/modo-portátil/batt-stop /etc/modo-portátil/lm-ac-start /etc/modo-portátil/lm-ac-stop /etc/modo-portátil/nolm-ac-start /etc/laptop-mode/nolm-ac-stop Como probablemente habrás adivinado, los directorios del formulario "X- stop-daemons" debe contener scripts de inicio de demonios que desea detenerse en modo X, mientras que los directorios de la forma "X- start-daemons" debe contener scripts de inicio de demonios que desea iniciar en el modo X. Por supuesto, es posible poner también en su propio manejo de modos: el único requisito sobre los scripts en los directorios es que manejan el Comandos "iniciar" y "detener", como suelen hacer los scripts de inicio. El orden del manejo del script es el siguiente. Cuando un Se ingresa al modo, las acciones del modo anterior se deshacen, en orden inverso. Esto significa que si el modo anterior tuviera hecho "daemon1 stop", "daemon2 stop" y "daemon3 start", luego las acciones para deshacer serán "daemon3 stop", "daemon2 start", "inicio daemon1". Después de eso, los scripts de parada para el nuevo Se llama al modo y luego se llama a los scripts de inicio. Tenga en cuenta que no se detectan puntos en común entre modos en este punto, es decir, si el modo al que vienes desde y el modo en el que vas a especificar que un demonio "X" debe detenerse, entonces el demonio se reactivará (es decir, iniciado) mientras salía del modo anterior, y luego se detuvo de nuevo. BATT_STOP BATT_START LM_AC_STOP LM_AC_START NOLM_AC_STOP NOLM_AC_START Estas opciones le permiten detener servicios (a través de su inicio scripts) en ciertos estados de poder. Especifique un espacio separado lista de nombres de servicios en estas opciones. Estos servicios son iniciado/detenido junto con los archivos de los directorios mencionado anteriormente.
Es posible desactivar su función principal (desactivar el disco duro) desde el archivo de configuración, pero seguirá ejecutando otras acciones.
Respuesta3
Puede utilizar este comando para detener o iniciar servicios:
sudo /etc/init.d/'preferred services' stop|start|restart