作为根,我跑
root@myself:~# echo disable | sudo tee /proc/acpi/ibm/fan; sleep 5; echo enable | sudo tee /proc/acpi/ibm/fan但我得到
disable
tee: /proc/acpi/ibm/fan: Invalid argument
enable
tee: /proc/acpi/ibm/fan: Invalid argument怎么可能,当我以根的形式运行时?
我需要做些什么才能让它发挥作用?
发布于 2018-06-21 12:42:05
问题不在于您的tee命令--尽管您已经在根shell中了,所以您可以使用一个简单的重定向echo disable > /proc/acpi/ibm/fan (当然也可以删除sudo)。
尽管“Linux中的所有内容都是一个文件”,但现实情况是,/proc中的“文件”实际上是运行内核的接口,不的行为与常规文件完全相同--如果我们使用strace,我们可以看到错误并不真正来自于tee,而是来自对打开的文件描述符的底层write调用(为了确保我们跟踪的是tee,而不是echo,我将语法从管道改为we string):
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:~# 该参数无效的原因是,默认情况下,thinkpad_acpi模块不启用扇控制--如果您cat文件,您可能只看到以下几行:
$ cat /proc/acpi/ibm/fan
status: enabled
speed: 1838
level: auto为了启用风扇控制,您需要在加载过程中向模块传递一个选项,您可以使用配置文件这样做:
$ cat /etc/modprobe.d/thinkpad_acpi.conf
options thinkpad_acpi fan_control=1可以在文本编辑器中创建,也可以使用
echo 'options thinkpad_acpi fan_control=1' | sudo tee -a /etc/modprobe.d/thinkpad_acpi.conf(这个只是一个普通文件,所以这次tee没有问题)。然后,您将需要重新启动-不幸的是,它似乎不可能删除和重新加载thinkpad_acpi模块的动态。
在用新选项重新启动模块以重新加载模块之后,您应该会看到它现在列出了一些附加的fan_control命令:
$ cat /proc/acpi/ibm/fan
status: enabled
speed: 3737
level: auto
commands: level ( is 0-7, auto, disengaged, full-speed)
commands: enable, disable
commands: watchdog ( is 0 (off), 1-120 (seconds))<#>现在您应该能够启用/禁用/修改扇参数,方法是直接使用命令(如/proc/acpi/ibm/fan )写入tee,或者使用链接中描述的thinkfan实用程序。
有关/proc的进一步背景信息,请参阅当我运行cat /proc/cpuinfo命令时会发生什么?
https://askubuntu.com/questions/1048379
复制相似问题