Eu não encontrei o conceito de tal perfil no Ubuntu antes, então estou supondo que você não pode fazer isso logo de cara.
Eu posso estar errado em assumir isso, o que seria legal. No entanto, supondo que não há um aplicativo para fazer isso, e eu tinha um strong desejo de configurar isso, aqui está agora eu vou fazer isso.
Eu vou escrever isso com a suposição de que você está executando o Gnome, já que esse é o ambiente que eu conheço melhor. O fluxo de processo subjacente ainda deve ser válido se você estiver em algum outro ambiente de desktop ou console.
O Gnome permite configurar alguns aspectos do comportamento do sistema por meio do Sistema > Preferências > Gerenciamento de energia . Isso chama o gnome-power-preferences , e é reforçado pelo processo daemon gnome-power-manager . Na página do projeto gnome, sabemos que o gnome-power-manager depende do HAL para saber se o laptop está funcionando com bateria.
Então,abraognome-device-managerparaveroqueoHALsabe.Encontreaentradaparabateria.Sevocêvirapenasumaguiaderesumo,ativeoVisualizar>Propriedadesdodispositivo.Sim,existemasduaschavesqueprecisamos:battery.rechargeable.is_dischargingebattery.rechargeable.is_charging
Agora sabemos o que precisamos, temos que descobrir como acessar isso através da linha de comando. Com ajuda, o HAL vem com ferramentas de linha de comando para acessar essas informações. Nós primeiro corremos
hal-device | less
e pesquise a tecla battery.rechareable.is_discharging . Faça backup para ver o bloco que detalha as informações da sua bateria:
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)
Observe o udi do dispositivo. Agora, consulte a propriedade desejada usando o comando hal-get-property :
$ hal-get-property --udi /org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0 --key "battery.rechargeable.is_discharging"
true
Agora sabemos como acessar o status da bateria, colocar isso em um script semelhante ao daemon. Abaixo está um modelo básico que leva o intervalo de pesquisa como o primeiro parâmetro. Você pode imaginar a verificação de erros e outras construções agradáveis no lazer:
#!/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 do script, você deve usar os scripts de inicialização para limpar o mysql etc
sudo /etc/init.d/mysqld stop
Como podemos melhorar isso? Depois de ter executado isso por um tempo e resolvido todas as torções, faça deste um serviço que inicia na inicialização. Verifique esta resposta aqui para obter instruções sobre como adicionar um script para iniciar automaticamente na inicialização.
Se você decidir não fazer isso, verifique esta pergunta para instruções sobre como permitir que este script execute comandos que exijam permissões de root.
Sei que respondi apenas uma parte da sua pergunta, mas você deve conseguir incorporar a seção sem fio de maneira semelhante. Use HAL para entender quando a conexão sem fio está desativada.
Não sei exatamente como você verifica e desativa todos os processos que tentam se conectar à rede, mas os seguintes comandos podem ajudá-lo com essa tarefa:
# list all processes using port 80
lsof -i tcp:80
#list programs connected via tcp
#include -u to include udp connections
sudo netstat -ntp