我想知道是否可以为我的 ubuntu 笔记本电脑设置配置文件,以便:
- 如果在电池模式下运行,请禁用 apache/mysql/postgresql
- 如果无线被禁用,则禁用所有尝试连接到互联网的进程。
答案1
我之前没有遇到过 Ubuntu 中这种配置文件的概念,所以我猜你不能马上做到这一点。
我可能错了,但这样也不错。不过,假设没有应用程序可以做到这一点,而我又非常想这样做,那么现在我就可以开始做了。
我假设您运行的是 Gnome,因为这是我最了解的环境。如果您在其他桌面或控制台环境中,底层流程应该仍然有效。
Gnome 允许你通过以下方式配置系统行为的某些方面系统 > 首选项 > 电源管理.这要求gnome 电源偏好设置,并由gnome 电源管理器守护进程。从 gnome 项目页面我们知道gnome 电源管理器依靠 HAL 来知道笔记本电脑是否依靠电池供电。
所以,开火吧gnome 设备管理器看看 HAL 知道什么。查找电池。如果您只看到摘要选项卡,请启用查看 > 设备属性。是的,我们需要两个密钥:电池.可充电.正在放电和电池.可充电.正在充电
现在我们知道了我们需要什么,我们必须找出如何通过命令行访问它。幸好 HAL 附带了命令行工具来访问这些信息。我们首先运行
hal 设备 | 更少
并搜索电池可充电正在放电键。备份,以便获取详细说明电池信息的块:
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-属性命令:
$ 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 停止
我们如何改进它?运行一段时间并解决所有问题后,将其设置为在启动时启动的服务。查看此答案这里有关添加开机自动启动脚本的说明。
如果你决定不这样做,请查看问题有关如何让此脚本执行需要 root 权限的命令的说明。
我知道我只回答了你问题的一部分,但你应该能够以类似的方式纳入无线部分。使用 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
答案2
laptop-mode-tools
可以完成您所要求的事情。
/etc/laptop-mode/conf.d/start-stop-programs.conf 启动/停止程序模块允许您启动或停止程序 当计算机切换到不同的电源状态时。 控制开始停止 如果启用此选项,笔记本电脑模式工具将自动 cally 为您启动和停止守护进程或其他程序。 守护进程的实际配置 停止/启动是通过放置指向守护进程的 init 的链接来完成的 以下目录中的脚本: /etc/laptop-mode/batt-start /etc/laptop-mode/batt-stop /etc/笔记本电脑模式/lm-ac-start /etc/笔记本电脑模式/lm-ac-stop /etc/笔记本电脑模式/nolm-ac-start /etc/笔记本电脑模式/nolm-ac-stop 你可能已经猜到了,“X- stop-daemons”应该包含您 想要在模式 X 中停止,而格式为“X- start-daemons”应该包含守护进程的初始化脚本, 你想以模式X启动。当然,也可以把 在你自己处理模式时也是如此:唯一的要求 目录中的脚本处理 “启动”和“停止”命令,就像初始化脚本通常做的那样。 脚本处理的顺序如下。当 进入模式后,前一个模式的操作将被撤消, 以相反的顺序。这意味着,如果前一种模式 完成“daemon1 stop”、“daemon2 stop”和“daemon3 start”,然后 撤消操作将是“daemon3 stop”,“daemon2 start”, “daemon1 start”。之后,新的 模式被调用,然后启动脚本被调用。 请注意,没有发现共同点 此时模式之间,即如果你正在使用的模式 您将同时指定守护进程 “X”应该停止,然后守护进程将取消停止 (即启动)同时离开先前的模式,然后 又停了下来。 电池停止 电池启动 LM_AC_停止 LM_AC_开始 停止 启动 这些选项允许您停止服务(通过其 init 脚本)在某些电源状态下运行。请指定一个空格分隔的 这些选项中的服务名称列表。这些服务是 与目录中的文件一起启动/停止 上文提到的。
可以从配置文件中禁用其主要功能(降低硬盘转速),但它仍会运行其他操作。
答案3
您可以使用此命令来停止或启动服务:
sudo /etc/init.d/'preferred services' stop|start|restart