三通:/proc/acpi/ibm/fan:无效的参数

rap*_*apt 4 bash 16.04

作为 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 身份运行时,这怎么可能?

我需要做什么才能让它发挥作用?

ste*_*ver 8

问题不在于您的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 时会发生什么?