
我想知道是否可以為我的 ubuntu 筆記型電腦設定設定文件,以便:
- 如果在電池模式下運行,請停用 apache/mysql/postgresql
- 如果無線已停用,請停用所有嘗試連接到網路的進程。
答案1
我以前沒有在 Ubuntu 中遇到過這樣的設定檔的概念,所以我猜你不能立即做到這一點。
我的假設可能是錯的,但這很好。但是,假設沒有應用程式可以執行此操作,並且我強烈希望進行此設置,那麼現在我就開始執行此操作。
我將假設您正在運行 Gnome 來編寫本文,因為這是我最了解的環境。如果您處於其他桌面或控制台環境中,底層流程應該仍然有效。
Gnome 讓您可以透過以下方式配置系統行為的某些方面系統 > 首選項 > 電源管理。這調用gnome 電源首選項,並且它是由gnome 電源管理器守護進程。從 gnome 專案頁面我們知道gnome 電源管理器依靠 HAL 來了解筆記型電腦是否使用電池供電。
所以,火起來gnome 設備管理器看看 HAL 知道什麼。尋找條目電池。如果您只看到摘要選項卡,請啟用檢視 > 設備屬性。是的,我們需要兩個金鑰:電池.rechargeable.is_discharging和電池.rechargeable.is_charging
現在我們知道我們需要什麼,我們必須找出如何透過命令列存取它。 HAL 附帶了命令列工具來存取此訊息,這很有幫助。我們首先運行
hal 設備 |較少的
並蒐索電池.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-屬性命令:
$ 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 啟動-停止-程式模組可讓您啟動或停止程式 當計算機切換到不同的電源狀態。 CONTROL_START_STOP 如果啟用此選項,筆記型電腦模式工具將自動 為您自動啟動和停止守護程式或其他程式。這 守護程式的實際配置 停止/啟動是透過放置指向守護程序 init 的連結來完成的 以下目錄中的腳本: /etc/筆記型電腦模式/batt-start /etc/筆記型電腦模式/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 正如您可能已經猜到的,“X-”形式的目錄 stop-daemons」應該包含您所使用的守護程式的初始化腳本 想要停止在模式 X,而「X-」形式的目錄 start-daemons」應該包含守護程式的初始化腳本 你想以模式X啟動。 以及您自己對模式的處理:唯一的要求 目錄中的腳本的特徵是它們處理 “啟動”和“停止”命令,就像初始化腳本通常所做的那樣。 腳本處理的順序如下。當一個 進入模式後,先前模式的操作將被撤銷, 以相反的順序。這意味著如果之前的模式有 完成“daemon1 stop”、“daemon2 stop”和“daemon3 start”,然後 撤銷操作將是「daemon3 stop」、「daemon2 start」、 「daemon1 啟動」。之後,新的停止腳本 呼叫模式,然後呼叫啟動腳本。 請注意,沒有檢測到共通性 此時在模式之間,即,如果您要選擇的模式 from 和您要指定的模式都指定守護程式 「X」應該被停止,然後守護程式將被取消停止 (即開始)同時離開先前的模式,然後 又停了下來。 電池停止 電瓶啟動 LM_AC_STOP LM_AC_START NOLM_AC_STOP NOLM_AC_START 這些選項可讓您停止服務(透過它們的 init 腳本)在某些電源狀態下。指定一個空格分隔 這些選項中的服務名稱清單。這些服務是 與目錄中的檔案一起啟動/停止 上文提到的。
可以從設定檔停用它的主要功能(旋轉硬碟),它仍然會運行其他操作。
答案3
您可以使用此命令來停止或啟動服務:
sudo /etc/init.d/'preferred services' stop|start|restart