Я не сталкивался с концепцией такого профиля в Ubuntu раньше, поэтому я предполагаю, что вы не можете сделать это сразу.
Я могу ошибаться, предполагая это, что было бы неплохо. Тем не менее, при условии, что нет приложения для этого, и у меня было сильное желание настроить это, вот теперь я пойду по этому поводу.
Я напишу это с предположением, что вы используете Gnome, так как это среда, которую я знаю лучше всего. Основной поток процесса должен оставаться действительным, если вы находитесь в какой-либо другой среде рабочего стола или консоли.
Gnome позволяет вам настроить некоторые аспекты поведения системы через Система> Предпочтения> Управление питанием. Это вызывает Gnome-Power-Preferences, и это обеспечивается процессом демона gnome-power-manager . Со страницы проекта gnome мы знаем, что gnome-power-manager зависит от HAL, чтобы знать, работает ли ноутбук от батареи.
Итак, запустите gnome-device-manager, чтобы узнать, что знает HAL. Найдите запись для батареи. Если вы видите только сводную вкладку, включите « Вид»> «Свойства устройства». Да, есть два ключа, которые нам нужны: battery.rechargeable.is_discharging и battery.rechargeable.is_charging
Теперь мы знаем, что нам нужно, мы должны выяснить, как получить к нему доступ через командную строку. Полезно HAL поставляется с инструментами командной строки для доступа к этой информации. Сначала мы запускаем
Hal-устройство | Меньше
и найдите ключ battery.rechareable.is_discharging . Сделайте резервную копию, чтобы получить блок с подробной информацией о вашей батарее:
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)
Обратите внимание на интерфейс устройства. Теперь запросим свойство, которое вы хотите, используя команду hal-get-property :
$ hal-get-property --udi /org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0 --key "battery.rechargeable.is_discharging"
true
Теперь мы знаем, как получить доступ к состоянию батареи, вставьте это в демоноподобный скрипт. Ниже приведен базовый шаблон, который принимает интервал опроса в качестве первого параметра. Вы можете придумать это с помощью проверки ошибок и других полезных конструкций на досуге:
#!/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);
Внутри скрипта вы должны использовать стартовые скрипты для корректного завершения работы mysql и т.д.
sudo /etc/init.d/mysqld stop
Как мы можем улучшить это? После того, как вы запустили это на некоторое время и сгладили все изгибы, сделайте это сервисом, который запускается при загрузке. Проверьте этот ответ здесь для получения инструкций по добавлению сценария для автоматического запуска при загрузке.
Если вы решите не делать этого, проверьте этот вопрос для получения инструкций о том, как разрешить этому сценарию выполнять команды, требующие прав суперпользователя.
Я понимаю, что ответил только на одну часть вашего вопроса, но вы сможете включить беспроводную секцию аналогичным образом. Используйте HAL, чтобы понять, когда беспроводная связь отключена.
Я не совсем уверен, как вы проверяете и отключаете все процессы, которые пытаются подключиться к сети, но следующие команды могут помочь вам с этой задачей:
# list all processes using port 80
lsof -i tcp:80
#list programs connected via tcp
#include -u to include udp connections
sudo netstat -ntp