2

Мне было интересно, можно ли настроить профили для моего ноутбука с Ubuntu так, чтобы:

  • Отключите apache/mysql/postgresql, если работаете в режиме батареи
  • Отключите все процессы, которые пытаются подключиться к Интернету, если беспроводная связь отключена.

3 ответа3

4

Я не сталкивался с концепцией такого профиля в 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
1

laptop-mode-tools могут сделать то, что вы просите.

   /etc/laptop-mode/conf.d/start-stop-programs.conf
       The  start-stop-programs  module  allows  you to start or stop programs
       when the computer switches to a different power state.

       CONTROL_START_STOP
                 If this option is enabled, laptop mode tools  will  automati‐
                 cally  start  and stop daemons or other programs for you. The
                 actual   configuration   of   which   daemons   are   to   be
                 stopped/started is done by placing links to the daemons’ init
                 scripts in the following directories:

                    /etc/laptop-mode/batt-start

                    /etc/laptop-mode/batt-stop

                    /etc/laptop-mode/lm-ac-start

                    /etc/laptop-mode/lm-ac-stop

                    /etc/laptop-mode/nolm-ac-start

                    /etc/laptop-mode/nolm-ac-stop
                 As you have probably guessed, the directories of the form "X-
                 stop-daemons" should contain init scripts of daemons that you
                 want stopped in mode X, while the directories of the form "X-
                 start-daemons"  should  contain  init scripts of daemons that
                 you want started in mode X. Of course, it is possible to  put
                 in  your  own handling of modes as well: the only requirement
                 on the scripts in the directories is  that  they  handle  the
                 "start" and "stop" commands, like init scripts usually do.

                 The  ordering  of  the  script handling is as follows. When a
                 mode is entered, the actions of the previous mode are undone,
                 in  reverse  order.  This means that if the previous mode had
                 done "daemon1 stop", "daemon2 stop" and "daemon3 start", then
                 the  undoing actions will be "daemon3 stop", "daemon2 start",
                 "daemon1 start". After that, the  stop-scripts  for  the  new
                 mode  are  called,  and  then  the  start-scripts are called.
                 Please note that  there  is  no  detection  of  commonalities
                 between  modes at this point, i.e., if the mode you’re coming
                 from and the mode you’re going to both specify that a  daemon
                 "X"  should  be  stopped,  then the daemon will be un-stopped
                 (that is, started) while leaving the previous mode, and  then
                 stopped again.

       BATT_STOP

       BATT_START

       LM_AC_STOP

       LM_AC_START

       NOLM_AC_STOP

       NOLM_AC_START

                 These  options allow you to stop services (through their init
                 scripts) in certain power states. Specify  a  space-separated
                 list  of  service names in these options.  These services are
                 started/stopped together with the files from the  directories
                 mentioned above.

Можно отключить его основную функцию (вращение жесткого диска) из файла конфигурации, он все равно будет выполнять другие действия.

0

Вы можете использовать эту команду для остановки или запуска служб:

sudo /etc/init.d/'preferred services' stop|start|restart

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .