作为 root,我运行
root@myself:~# echo disable | sudo tee /proc/acpi/ibm/fan; sleep 5; echo enable | sudo tee /proc/acpi/ibm/fan
Run Code Online (Sandbox Code Playgroud)
但我明白了
disable
tee: /proc/acpi/ibm/fan: Invalid argument
enable
tee: /proc/acpi/ibm/fan: Invalid argument
Run Code Online (Sandbox Code Playgroud)
当我以 root 身份运行时,这怎么可能?
我需要做什么才能让它发挥作用?
问题不在于您的tee命令 - 尽管因为您已经在 root shell 中,您可以使用简单的重定向echo disable > /proc/acpi/ibm/fan(当然也可以删除sudo)。
尽管“Linux 中的一切都是一个文件”,但实际情况是“文件”实际上是/proc运行内核的接口,并且与常规文件的行为并不完全一样——如果我们使用,strace我们可以看到错误并不是真正来自tee,但从底层write调用到打开的文件描述符(我将语法从管道更改为 here-string 以确保我们正在跟踪而tee不是echo):
root@t400s:~# strace tee /proc/acpi/ibm/fan <<< 'disabled'
execve("/usr/bin/tee", ["tee", "/proc/acpi/ibm/fan"], [/* 23 vars */]) = 0
.
.
. = 0
openat(AT_FDCWD, "/proc/acpi/ibm/fan", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
read(0, "disabled\n", 8192) = 9
write(1, "disabled\n", 9disabled
) = 9
write(3, "disabled\n", 9) = -1 EINVAL (Invalid argument)
write(2, "tee: ", 5tee: ) = 5
write(2, "/proc/acpi/ibm/fan", 18/proc/acpi/ibm/fan) = 18
.
.
.
+++ exited with 1 +++
root@t400s:~#
Run Code Online (Sandbox Code Playgroud)
参数无效的原因是默认情况下,thinkpad_acpi模块不启用风扇控制 - 如果您使用cat该文件,您可能只会看到如下几行:
$ cat /proc/acpi/ibm/fan
status: enabled
speed: 1838
level: auto
Run Code Online (Sandbox Code Playgroud)
为了启用风扇控制,您需要在加载期间向模块传递一个选项,您可以使用配置文件来完成:
$ cat /etc/modprobe.d/thinkpad_acpi.conf
options thinkpad_acpi fan_control=1
Run Code Online (Sandbox Code Playgroud)
您可以在文本编辑器中创建,或使用
echo 'options thinkpad_acpi fan_control=1' | sudo tee -a /etc/modprobe.d/thinkpad_acpi.conf
Run Code Online (Sandbox Code Playgroud)
(这是只是一个普通的文件,所以没有用的问题tee这段时间)。然后您将需要重新启动 - 不幸的是,似乎无法thinkpad_acpi即时删除和重新加载模块。
重新启动以使用新选项重新加载模块后,您应该会看到它现在列出了一些附加fan_control命令:
$ cat /proc/acpi/ibm/fan
status: enabled
speed: 3737
level: auto
commands: level <level> (<level> is 0-7, auto, disengaged, full-speed)
commands: enable, disable
commands: watchdog <timeout> (<timeout> is 0 (off), 1-120 (seconds))
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够启用/禁用/修改风扇参数,方法是/proc/acpi/ibm/fan直接使用诸如 your 之类的命令写入tee,或使用thinkfan链接中描述的实用程序。
有关更多背景信息/proc,请参阅运行命令 cat /proc/cpuinfo 时会发生什么?