В качестве пользователя root я запускаю
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
Как это возможно, когда я запускаю от имени root?
Что мне нужно сделать, чтобы это сработало?
Проблема не с Вашим tee
команда - хотя, так как Вы уже находитесь в корневой оболочке, Вы, возможно, использовали простое перенаправление echo disable > /proc/acpi/ibm/fan
(и, возможно, конечно, удалил sudo
).
Хотя "все в Linux - файл", действительность - это "файлы" в /proc
действительно интерфейсы к рабочему ядру и не ведут себя точно как регулярные файлы - если мы используем strace
мы видим, что ошибка действительно не прибывает из tee
, но от базового write
звоните в открытый дескриптор файла (я изменил синтаксис от канала до здесь-строки, чтобы удостовериться, что мы прослеживаем 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:~#
Причина аргумент недействителен, является этим по умолчанию, 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 <level> (<level> is 0-7, auto, disengaged, full-speed)
commands: enable, disable
commands: watchdog <timeout> (<timeout> is 0 (off), 1-120 (seconds))
Теперь необходимо смочь включить/запретить/изменить параметры вентилятора, любого путем записи в /proc/acpi/ibm/fan
непосредственно с командой, такой как Ваш tee
, или использование thinkfan
утилита описана в Вашей ссылке.
Для дальнейшего фона о /proc
, посмотрите то, Что происходит, когда я выполняю кошку команду/proc/cpuinfo?