Я пытаюсь изменить значение /sys/bus/usb/devices/4-3/power/wakeup
при каждой загрузке (4-3 по моему lsusb
, это идентификатор клавиатуры).
Значение по умолчанию:
# cat /sys/bus/usb/devices/4-3/power/wakeup
enabled
Классическое «онлайн» редактирование работает как положено:
# echo disabled > /sys/bus/usb/devices/4-3/power/wakeup
# cat /sys/bus/usb/devices/4-3/power/wakeup
disabled
Я использую системный дистрибутив, поэтому я хотел бы использовать системный способ для редактирования "временных файлов"
Я создал следующий файл:
# cat /etc/tmpfiles.d/disable-usb-wakeup.conf
w /sys/bus/usb/devices/4-3/power/wakeup - - - - disabled
но после каждой загрузки у меня все еще есть значение по умолчанию в этом файле (т.е. включено)
Я делаю что-то неправильно?
РЕДАКТИРОВАТЬ:
Вот еще один тест:
# cat /etc/tmpfiles.d/scheduler.conf
w /sys/block/sda/queue/scheduler - - - - deadline
и этот работает отлично! После загрузки я получаю:
# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
(по умолчанию был планировщик cfq)
Итак, почему этот работает, а другой нет?
- Потому
/sys/bus/usb/devices/4-3/power/wakeup
что символическая ссылка на/sys/devices/pci0000:00/0000:00:12.1/usb4/4-3/
? - Потому что
/sys/bus/usb/devices/4-3/power/wakeup
содержит только одно слово? (т.е. без пробелов)
arch-linux
systemd
sysfs
Eang
источник
источник
Ответы:
Я не верю,
tmpfiles.d
что это правильный путь сюда. Вы действительно должны выполнятьudev
правила. Посмотрите:И это продолжается, поднимаясь по дереву родительского устройства. Но учтите, что, используя только вышеприведенную информацию, вы можете сделать:
И я считаю, что это делает для большинства вашего сценария. Я думаю, вы захотите поставить вышесказанное после правила 60. И действительно, вы должны сделать это для остальных - только
sleep
бит в вашем сценарии является достаточной причиной - это подразумевает состояние гонки.udev
это тот, кто добавляет и устанавливает эти параметры - это тот, который заполняетsysfs
. Просто попросите его сделать работу, которую он уже делает.И для вашей клавиатуры вы обязательно должны сделать то же самое - и подсветку. Просто получите необходимую информацию об этих устройствах
udevadm
, напишите некоторые правила иudevadm test
их.источник
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"
. Не могли бы вы объяснить, почему ваше правило UDEV здесь не содержит оператора ACTION и не разделено запятыми?ACTION
немного необходимо, хотя.udevadm test /devices/pci0000:00/0000:00:1f.2/ata1/host0/scsi_host/host0/
[Моя первоначальная идея, что это может быть потому, что systemd-tmpfiles использует потоковый ввод-вывод и не предназначен для использования с proc или sys, неверна . Моя вторая гипотеза о значении новой строки также была неверной ...]
Я только что посмотрел,
/usr/lib/systemd/system/systemd-tmpfiles-setup.service
и есть пара моментов, которые могут быть интересны:«Хочет», «После» и «До» дают некоторую информацию о том, когда это произойдет; Я бы подумал, что ваше устройство зарегистрировано к этому моменту, но может быть что-то последующее, которое сбрасывает значение sysfs.
Наиболее полезным битом является строка ExecStart, потому что это фактическая команда, которая отвечает за эту службу. Это на самом деле упоминается в
man systemd-tmpfiles
:Итак, чтобы проверить это, установите значение sysfs в значение «enabled», а затем попробуйте запустить,
systemd-tmpfiles --create
что обработает вашу директиву w в /etc/tmpfiles.d. Если это работает (это должно!), То вы знаете, что метод systemd-tmpfile подходит, просто вы должны сделать это позже в процессе загрузки, возможно, с:Что означает написание вашего собственного служебного файла; если по какой-то причине это не сработает, вы всегда можете написать служебный файл для скрипта, с которым будете это делать
echo
.источник
/proc/acpi/wakeup
работает нормально ( wiki.archlinux.org/index.php/Systemd#Teilitary_files )echo -n disabled > /sys/...
работает, так что, вероятно, присутствие новой строки не волнует в этом случае. Но tmpfiles все еще не работает, я попробовал и тоdisabled\n
и другое"disabled\n"
Недавно я узнал о сложном способе обработки /etc/tmpfiles.d перед заполнением / sys, поэтому вам нужно создать правильные правила udev, чтобы они включались всякий раз, когда появляются устройства или ... пошли грязным путем (но если вы спросите меня, более гибкий) и создайте сервис, который запускает скрипт с командами для записи в / sys.
Посмотрите здесь пример того, как создать такой скрипт, https://bbs.archlinux.org/viewtopic.php?id=148170, который вы можете заполнить примерно так:
источник
Это может быть немного излишним, но в моем случае оба метода, упомянутые в других ответах, терпели неудачу.
tmpfiles.d
Делает изменения до того , как/sys/
записи заполняются иudev
метод не нашел запись (которая была виртуальное сетевое устройствоbr0
). Таким образом, я создал новый файл службы. Просто создайте новый файл/etc/systemd/system/disable-usb-wakeup.service
и поместите в него следующее:Теперь, чтобы убедиться, что этот модуль запускается при каждой загрузке, просто выпустите:
И тебе должно быть хорошо идти.
источник