tee: / proc / acpi / ibm / fan: неверный аргумент

В качестве пользователя 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?

Что мне нужно сделать, чтобы это сработало?

1
задан 21 June 2018 в 03:46

1 ответ

Проблема не с Вашим 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?

5
ответ дан 3 December 2019 в 06:37

Другие вопросы по тегам:

Похожие вопросы: