我的笔记本电脑上有2个图形卡。一个是IGP,另一个是离散的。

我已经编写了一个Shell脚本来关闭独立显卡。

如何将其转换为systemd脚本以在启动时运行它?
/>

#1 楼

主要有两种方法可以执行此操作:


如果必须运行脚本,则无需转换,而是通过systemd服务运行脚本。

因此,您需要两个文件:脚本和.service文件(单元配置文件)。
确保脚本是可执行文件,第一行(shebang)是#!/bin/sh。然后在.service(纯文本文件,称为/etc/systemd/system)中创建vgaoff.service文件。
例如:


/usr/bin/vgaoff

单位文件:/etc/systemd/system/vgaoff.service


现在,编辑单位文件。它的内容取决于脚本的工作方式:

如果vgaoff刚刚关闭gpu电源,例如:

exec blah-blah pwrOFF etc 


,那么vgaoff.service的内容应该be:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff

[Install]
WantedBy=multi-user.target


如果vgaoff用于关闭GPU并重新打开电源,例如:

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

case  in
  start|stop) "" ;;
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


它将在下次启动时自动启动。从systemd v.220起,您甚至可以使用

systemctl enable --now vgaoff.service


一次性启用和启动服务(在较旧的设置下,您必须手动启动它)。
有关更多详细信息,请参见systemd.service手册页。


故障排除。
从这里开始:如何查看systemd服务的完整日志? systemd服务出口代码和状态信息说明

评论


感谢您的详细回答。该脚本包含一个命令“ echo OFF> / sys / kernel / debug / vgaswitcheroo / switch”

– Sharique
2012年9月11日在10:04



它失败并显示以下消息vgaoff.service-关机gpu已加载:已加载(/usr/lib/systemd/system/vgaoff.service;已启用)活动:自2012年9月11日星期二以来失败(结果:退出代码)23: 46:46 +0530; 30年前进程:5258 ExecStart = / usr / lib / systemd / scripts / vgaoff(代码=退出,状态= 203 / EXEC)CGroup:名称= systemd:/system/vgaoff.service

– Sharique
2012年9月11日18:17



糟糕,我又错过了这个小东西,一切正常。.再次感谢。

– Sharique
2012年9月12日在18:58

@Bazon-根据这种逻辑,该站点上成千上万的答案是没有经验的用户的“潜在陷阱”。不了解/完全了解echo Something> / some / file(实际上是任何其他命令)功能的人应该在尝试在系统上运行内容之前熟悉CLI的基础知识。另外,FYI,请阅读如何在几种笔记本电脑型号上关闭dGPU,看看那里使用的命令是否可以用您建议的方式代替。另外,要恢复原始文件,通常需要重新安装拥有该文件的软件包。

–don_crissti
13年5月14日23:56

@don_crissti哇!谢谢你的提示。 (删除了我的原始评论,以避免传播误导性信息。)

–伍德罗·巴洛
16-11-14在21:39