У меня на ноутбуке 2 видеокарты. Один - IGP, а другой - дискретный.
Я написал сценарий оболочки, чтобы отключить дискретную видеокарту.
Как я могу преобразовать его в сценарий systemd, чтобы запустить его при запуске?
источник
У меня на ноутбуке 2 видеокарты. Один - IGP, а другой - дискретный.
Я написал сценарий оболочки, чтобы отключить дискретную видеокарту.
Как я могу преобразовать его в сценарий systemd, чтобы запустить его при запуске?
Есть в основном два подхода для этого:
systemd
сервис.Поэтому вам нужны два файла: сценарий и .service
файл (файл конфигурации модуля).
Убедитесь, что ваш скрипт исполняемый и первая строка ( шебанг ) - это #!/bin/sh
. Затем создайте .service
файл в /etc/systemd/system
(простой текстовый файл, давайте назовем его vgaoff.service
).
Например:
/usr/bin/vgaoff
/etc/systemd/system/vgaoff.service
Теперь отредактируйте файл модуля. Его содержание зависит от того, как работает ваш скрипт:
Если vgaoff
просто отключить графический процессор, например:
exec blah-blah pwrOFF etc
тогда содержание vgaoff.service
должно быть:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Если vgaoff
используется для выключения графического процессора, а также для его повторного включения, например:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
тогда содержание vgaoff.service
должно быть:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Чтобы выключить:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
Чтобы выключить и включить:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Как только вы закончите с файлами, включите сервис:
systemctl enable vgaoff.service
Это начнется автоматически при следующей загрузке. Вы даже можете включить и запустить сервис за один раз с
systemctl enable --now vgaoff.service
с systemd v.220
(на старых установках вам придется запускать его вручную).
Для более подробной информации смотрите systemd.service
страницу руководства.
Поиск и устранение неисправностей .
Начните здесь:
Как посмотреть полный журнал systemd
сервиса?
systemd
коды выхода службы и объяснение информации о состоянии
echo SOMETHING > /some/file
делает (или любая другая команда на самом деле), должны ознакомиться с основами CLI, прежде чем пытаться запускать что-то на своих системах. Кроме того, FYI, прочитайте, как отключить dGPU на нескольких моделях ноутбуков, посмотрите, можно ли заменить используемые там команды чем-то, что вы предлагаете. Также для восстановления исходного файла вы обычно переустанавливаете пакет, которому он принадлежит.