我有一台 2009 年初的 iMac,传感器有问题。ODD 和 CPU 风扇全速运转。为了在 Ubuntu 中将它们降至最低速度,我需要在终端中设置速度,使用此方法。我编写了一个 bash 脚本来帮我完成这个操作,而不是每次启动后都执行这个操作,但是它不起作用。
这是我的脚本:
#!/bin/bash
echo "Beginning script..."
echo "Logging in as root..."
sudo su
cd /sys/devices/platform/applesmc.768/
echo "Enabling manual override for Fan 1 (ODD fan)..."
echo '1' > fan1_manual
echo "Setting speed of Fan 1 (ODD fan) to 1650 RPM..."
echo '1650' > fan1_output
echo "Enabling manual override for Fan 3 (CPU fan)..."
echo '1' > fan3_manual
echo "Setting speed of Fan 3 (CPU fan) to 1200 RPM..."
echo '1200' > fan3_output
echo "Done."
问题出在“sudo su”上。它提示输入密码,但输入密码后什么也没发生。它只是停止了。
答案1
脚本暂停是因为sudo su
启动了一个新的 shell 进程。原始 shell 进程(即运行脚本的进程)正在等待子 shell 结束。
我建议以 root 权限运行整个脚本,而不是要求脚本本身以 root 身份登录。从sudo su
代码中删除部分内容并运行脚本,如下所示:
$ sudo ./yourscript
这是常见的做法。请注意,系统管理脚本(例如)update-grub
不要求输入 root 密码 - 它们只是需要以 root 身份运行。
答案2
你可以把交互式的东西拿出来,然后把这些线复制/etc/rc.local
到
# 默认情况下,该脚本不执行任何操作。和出口 0线
sudo nano /etc/rc.local
插入编辑的脚本..
cd /sys/devices/platform/applesmc.768/
echo "Enabling manual override for Fan 1 (ODD fan)..."
echo '1' > fan1_manual
echo "Setting speed of Fan 1 (ODD fan) to 1650 RPM..."
echo '1650' > fan1_output
echo "Enabling manual override for Fan 3 (CPU fan)..."
echo '1' > fan3_manual
echo "Setting speed of Fan 3 (CPU fan) to 1200 RPM..."
echo '1200' > fan3_output
CtloEnter 将保存文件
Ctlx 将退出nano
这样,它就会在您启动时执行。
答案3
该命令sudo su
会创建一个新的 shell 会话。它正在等待您输入命令。它是不是将执行该行之后的命令。
您有 2 个选择:
sudo su
1)在单独的脚本中提取命令并使用 sudo 运行
2)将以下行echo '1' > fan1_manual
改为 echo '1' | sudo tee fan1_manual