У меня есть .sh-скрипт, пытающийся сделать изменения powertop постоянными.

'auto' > '/sys/bus/pci/devices/0000:00:02.1/power/control';

Команды в этом .sh-скрипте относятся к этому типу.

У меня есть systemd-сервис в /etc /systemd /system с таким содержимым:

[Unit]
Description=My Script
After=network.target

[Service]
Type=forking
ExecStart=/home/my_username/.autostart_sudo.sh

[Install]
WantedBy=multi-user.target

Сценарий ".autostart_sudo.sh" корректно вызывается после загрузки (например, команда "bluetooth off" в этом файле называется perfeclty), но команды echo -> - не вызываются успешно.

Я заметил, что печатать

  sudo 'auto' > '/sys/bus/pci/devices/0000:00:02.1/power/control';

в терминале выдает ограничение-ошибку, но

  sudo su
 'auto' > '/sys/bus/pci/devices/0000:00:02.1/power/control';

работает.

Как мне изменить мой systemd+bash-скрипт, чтобы изменения в powertop работали при загрузке?

Заранее спасибо!

Редактировать:

Хорошо, я пытаюсь описать поток еще раз: я разместил сервис systemd в верхней части этого поста. Этот сервис вызывает «.autostart_sudo.sh» в моем /home /user /.

В этом файле .autostart_sudo.sh много команд, которые выглядят так:

echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.2/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:04:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:03:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1a.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:03.3/power/control';
(...)
thinkfan start

"Thinkfan start" также нуждается в root-привилегиях для правильного запуска, этот работает, но "echo" -команды не работают.

Я тоже попробовал

bash -c 'echo auto > /sys/bus/pci/devices/0000:00:1d.0/power/control;'
bash -c 'echo auto > /sys/bus/pci/devices/0000:00:1a.7/power/control;'
bash -c 'echo auto > /sys/bus/pci/devices/0000:00:1a.2/power/control;'
bash -c 'echo auto > /sys/bus/pci/devices/0000:00:02.0/power/control;'
bash -c 'echo auto > /sys/bus/pci/devices/0000:00:02.1/power/control;'  

тоже не работает:/

Материал sudo-test, который я упоминал выше, был просто тестами в Терминале.

любой совет?

3 ответа3

0

Так грустно, наконец, я должен вмешаться и ответить на этот вопрос ...

Раньше я не мог отвечать, потому что у меня не было репутации, чтобы отвечать на вопросы, комментировать, голосовать. Так что, если вы хотите больше ответов, тогда делайте это

Вы должны сделать 2 вещи:

1) Автоматическое предоставление пароля для каждой команды, требующей привилегий sudo.

echo "PASSWORD" | sudo -S COMMAND

2) Дайте всем право изменять содержимое каждого файла конфигурации

chmod 666 File_Path

вот код, который работает для меня:

Измените "ПАРОЛЬ" на свой текущий пароль sudo

#For File Permission Change

echo "PASSWORD" | sudo -S chmod 666 '/sys/class/scsi_host/host0/link_power_management_policy'
echo "PASSWORD" | sudo -S chmod 666 '/sys/class/scsi_host/host1/link_power_management_policy'
echo "PASSWORD" | sudo -S chmod 666 '/sys/module/snd_hda_intel/parameters/power_save'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/i2c/devices/i2c-5/device/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/usb/devices/3-1.6/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1b.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:16.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1f.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1c.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1f.2/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1c.2/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:14.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1d.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:06:00.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:03.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:00.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1c.3/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:07:00.0/power/control'
echo "PASSWORD" | sudo -S chmod 666 '/sys/bus/pci/devices/0000:00:1c.4/power/control'

#For Actual Modification

echo 'min_power' > '/sys/class/scsi_host/host0/link_power_management_policy'
echo 'min_power' > '/sys/class/scsi_host/host1/link_power_management_policy'
echo '1' > '/sys/module/snd_hda_intel/parameters/power_save'
echo 'auto' > '/sys/bus/i2c/devices/i2c-5/device/power/control'
echo 'auto' > '/sys/bus/usb/devices/3-1.6/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1b.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:16.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.2/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.2/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:14.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1d.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:06:00.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:03.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:00.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.3/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:07:00.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.4/power

Примечание: возможно, вам придется изменить все команды в соответствии с вашей системой :)

0

Да мой плохой Я вызвал tlp start после твиков Powertop. Динт знает, что tlp испортит настройки так плохо. Итак, если у вас возникла такая же проблема: вызовите tlp start

0

Вы уверены, что X-бит установлен для /home/my_username/.autostart_sudo.sh Имейте в виду, что владелец uid /gid этого скрипта должен быть root, чтобы предотвратить внедрение кода оболочки вредоносным ПО. А также

sudo echo 'auto' > '/sys/bus/pci/devices/0000:00:02.1/power/control';

не будет работать, потому что «>» выполняется не root. Пытаться

sudo bash -c 'echo auto > /sys/bus/pci/devices/0000:00:02.1/power/control';

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