En tant que root, je cours
root@myself:~# echo disable | Sudo tee /proc/acpi/ibm/fan; sleep 5; echo enable | Sudo tee /proc/acpi/ibm/fan
mais je reçois
disable
tee: /proc/acpi/ibm/fan: Invalid argument
enable
tee: /proc/acpi/ibm/fan: Invalid argument
Comment est-ce possible, quand je cours en tant que root?
Que dois-je faire pour que cela fonctionne?
Le problème ne vient pas de votre commande tee
- bien que puisque vous êtes déjà dans un shell racine, vous auriez pu utiliser une simple redirection echo disable > /proc/acpi/ibm/fan
(et vous auriez certainement supprimé la Sudo
).
Bien que "tout dans Linux soit un fichier", la réalité est que les "fichiers" dans /proc
sont réellement des interfaces avec le noyau en cours d'exécution et ne le font pas se comporte exactement comme des fichiers normaux. Si nous utilisons strace
, nous pouvons voir que l'erreur ne provient pas vraiment de tee
, mais de l'appel write
sous-jacent au descripteur de fichier ouvert ( J'ai changé la syntaxe d'un tube à une chaîne ici pour m'assurer que nous traçons le tee
pas le 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:~#
La raison pour laquelle l'argument n'est pas valide est que, par défaut, le module thinkpad_acpi
n'active pas le contrôle du ventilateur. Si vous cat
le fichier, vous ne verrez probablement que quelques lignes, comme suit:
$ cat /proc/acpi/ibm/fan
status: enabled
speed: 1838
level: auto
Pour activer le contrôle des ventilateurs, vous devez transmettre une option au module pendant le chargement, ce que vous pouvez utiliser à l'aide d'un fichier de configuration:
$ cat /etc/modprobe.d/thinkpad_acpi.conf
options thinkpad_acpi fan_control=1
que vous pouvez créer dans un éditeur de texte ou en utilisant
echo 'options thinkpad_acpi fan_control=1' | Sudo tee -a /etc/modprobe.d/thinkpad_acpi.conf
(Ceci est juste un fichier normal, donc pas de problème avec tee
cette fois). Ensuite, vous devrez redémarrer. Malheureusement, il ne semble pas possible de retirer et de recharger le module thinkpad_acpi
à la volée.
Après avoir redémarré le module avec sa nouvelle option, vous devriez voir qu'il répertorie maintenant quelques commandes supplémentaires 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))
Maintenant vous devriez pouvoir activer/désactiver/modifier les paramètres du ventilateur, soit en écrivant directement sur /proc/acpi/ibm/fan
à l'aide d'une commande telle que votre tee
, ou à l'aide de l'utilitaire thinkfan
décrit dans votre lien.
Pour plus d'informations sur /proc
, voir Que se passe-t-il lorsque j'exécute la commande cat/proc/cpuinfo?