Изменять состояние можно двумя способами:
Первый, "грязный", через rc.local.
Второй, через sysfs, - для этого пакет sysfsutils и включен в состав образа xfce-sysv по-умолчанию.
Почему первый способ грязный? Он не рекомендуется? Честно говоря, про него мне понятно.
А вот про 2-й способ - не очень
Ну во-первых он как бы не системный.
Во-вторых, для всего что можно обработать через /sys, существует файл конфигурации /etc/sysfs.conf.
Пока наполнение rc.local невелико, сложностей никаких. Но с ростом наполнения, это может превратиться в плохо читаемую свалку.
Ещё момент: очередь старта rc.local, - 99. И он всегда отрабатывает последним.
sysfs отработает ещё до того, как стартанёт display manager:
# ls -1 /etc/rc[2-5].d/ | sort | grep ^S | grep 'sysfs\|dm\|local' | sort -u
S33sysfs
S45dm
S99local
Что в ряде случаев оказывается полезным. Например смена дефолта яркости дисплея.
Например:
Уровень яркости сохраняется в профиле пользователя tde/kde3 kpowersave. И уровень яркости изменится только после входа в X-сессию, но не ранее. В случае с rc.local, яркость изменится только после того, dm будет загружен. Но если яркость устанавливается через sysfs, то её уровень будет установлен ещё в процессе отработки сервисов до старта dm. И уже когда он будет загружен, яркость уже будет на установленном уровне.
Здесь важно понять общий принцип настройки через sysfs.
Поехали:
Начало то же как и описывалось ранее:
Изменение статуса pci-устройства для S-state состоянияСм.:
https://ru.wikipedia.org/wiki/ACPIВыясним, на каком устройстве сидит usb-мышь
# ls -1 /dev/input/by-path/pci-*-mouse
/dev/input/by-path/pci-0000:00:14.0-usb-0:1.3:1.0-event-mouse
/dev/input/by-path/pci-0000:00:14.0-usb-0:1.3:1.0-mouse
Это pci-устройство с адресом
# ls -1 /dev/input/by-path/pci-*-mouse | head -n 1 | cut -f3 -d-
0000:00:14.0
И это xhci usb контроллер
# lspci -v | grep 00:14.0
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03) (prog-if 30 [XHCI])
Доступность файла для записи, для изменения состояния wakeup
# ls -l /sys/bus/pci/devices/0000\:00\:14.0/power/wakeup
-rw-r--r-- 1 root root 4096 дек 17 08:38 /sys/bus/pci/devices/0000:00:14.0/power/wakeup
Текущее состояние
# cat /sys/bus/pci/devices/0000\:00\:14.0/power/wakeup
enabled
# grep `ls /dev/input/by-path/pci-*-mouse | head -n 1 | cut -f3 -d-` /proc/acpi/wakeup
XHC S3 *enabled pci:0000:00:14.0
Изменяем текущее состояние с enabled на disabled для S3
# echo disabled > /sys/bus/pci/devices/0000\:00\:14.0/power/wakeup
Оно изменилось
# grep `ls /dev/input/by-path/pci-*-mouse | head -n 1 | cut -f3 -d-` /proc/acpi/wakeup
XHC S3 *disabled pci:0000:00:14.0
Конфигурирование /etc/sysfs.confДля конфигурирования нужен пакет sysfsutils и в xfce-sysv он входит изначально.
Пакет предоставляет сервис
# chkconfig --list sysfs
sysfs 0:выкл 1:выкл 2:вкл 3:вкл 4:вкл 5:вкл 6:выкл
Конфигурирование предоставляется через файл /etc/sysfs.conf
Например есть целевой файл для записи в него disabled:
# ls -l /sys/bus/pci/devices/0000\:00\:14.0/power/wakeup
-rw-r--r-- 1 root root 4096 дек 17 22:44 /sys/bus/pci/devices/0000:00:14.0/power/wakeup
При записи в /etc/sysfs.conf пути к целевому файлу, начало пути '/sys/' не записывается, а символ равно и записываемое значение, указываются через пробелы:
# tail -n 3 /etc/sysfs.conf
# S3 wakeup disable
bus/pci/devices/0000\:00\:14.0/power/wakeup = disabled
(Перевод курсора через Enter на пустую строку обязателен!!)
Применение без перезагрузки:
Изначальное состояние, - enabled:
# grep `ls /dev/input/by-path/pci-*-mouse | head -n 1 | cut -f3 -d-` /proc/acpi/wakeup
XHC S3 *enabled pci:0000:00:14.0
Какими командами можно воспользоваться и состояние сервиса:
# /etc/rc.d/init.d/sysfs *
Usage: sysfs {start|stop|reload|restart|condstop|condrestart|condreload|status}
# /etc/rc.d/init.d/sysfs status
Subsystem was not activated.
Стартуем сервис
# /etc/rc.d/init.d/sysfs start
Setting sysfs variables... [ DONE ]
и проверяем состояние
# grep `ls /dev/input/by-path/pci-*-mouse | head -n 1 | cut -f3 -d-` /proc/acpi/wakeup
XHC S3 *disabled pci:0000:00:14.0
На старте системы, сервис sysfs прочитает содержимое файла файла /etc/sysfs.conf и применит все незакомментированные конфигурации.
Через /etc/sysfs.conf можно также отконфигурировать и
acpi_cpufreq для двухядерного процессора с гипертридингом
devices/system/cpu/cpu0/cpufreq/scaling_governor = ondemand
devices/system/cpu/cpu1/cpufreq/scaling_governor = ondemand
devices/system/cpu/cpu2/cpufreq/scaling_governor = ondemand
devices/system/cpu/cpu3/cpufreq/scaling_governor = ondemand
и яркость дисплея по-умолчанию
# tail -n 3 /etc/sysfs.conf
# Display brightness
class/backlight/intel_backlight/brightness = 565
Установки будут выполнены на старте сервиса sysfs. На загрузке системы или прямой командой от root, для применения новых конфигураций без перезагрузки.
Единственной причиной перезагрузки, может быть смена драйвера intel_pstate на драйвер acpi_cpufreq. Поскольку на современных Intel архитектурах, драйвер intel_pstate используется по-умолчанию. И для использования драйвера acpi_cpufreq, требуется явное указание запрета использования драйвера intel_pstate параметром ядру в конфиге загрузчика. Что в свою очередь требует перезагрузки.