• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Schreibrechte auf Gerätedatei /etc/nvram

vgruetzm

Newbie
Moin Leute,
habe ein kleines Problem. Ich möchte auf meinem Laptop (IBM T23) das Thinkpad-KMilo-Plugin laufen lassen (zur Steuerung von Bildschirmhelligkeit, Lautstärke etc.). Dazu ist es notwendig, das die Datei /etc/nvram existiert und auch für den normalen Benutzer beschreibbar ist.
Nun das Problem:
Die Datei existiert bzw. ich habe sie als root mit
Code:
/bin/mknod /dev/nvram c 10 144
wie gefordert als character device angelegt und anschließend mit
Code:
/bin/chmod 777 dev/nvram
für jeden Benutzer les- und schreibbar gemacht. Funktioniert soweit auch ganz gut. Nach einem Neustart sind die Lese- und Schreibrechte für den normalen Benutzer allerdings flöten gegangen.

Nun meine Frage:
Wie kann ich die Lese- und Schreibberechtigung erhalten bzw. beim Neustart automatisch setzen? Ich habe das zunächst in der Datei /etc/init.d/boot.local versucht (Änderungen in rot):

  • #! /bin/sh
    #
    # Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany. All rights reserved.
    #
    # Author: Werner Fink <werner@suse.de>, 1996
    # Burchard Steinbild, 1996
    #
    # /etc/init.d/boot.local
    #
    # script with local commands to be executed from init on system startup
    #
    # Here you should add things, that should happen directly after booting
    # before we're going to the first run level.
    #
    # echo ... creating /dev/nvram ...
    rm /dev/nvram >nul
    /bin/mknod /dev/nvram c 10 144
    /bin/chmod 777 dev/nvram
allerdings ohne Erfolg. Offensichtlich werden die Rechte für nvram später während des Bootvorganges noch mal neu gesetzt. Wo? Ich habe mir als nächstes überlegt, ob man das in die Init-Scripten unter /etc/init.d/... beim Booten einbauen kann, habe aber keine Ahnung wie. In welchem Runlevel müßte man das tun? 5? Wie müßte das Script dazu aussehen bzw. kann/sollte man das in ein bestehendes Script einbauen?

Ich bin für jede Hilfe dankbar. :roll:

Ein paar Daten zu meinem System
- IBM Thinkpad T23
- SuSE 10.0, Kernel 2.6.13-15.18-default[/i]
 

gameboy

Hacker
Also unter Suse 10.0 konnte man die Berechtigungen auf Devices noch über die Datei /etc/logindevperm konfigurieren. Auf meinem heutigen Suse 10.3-System suche ich die Datei jedoch vergeblich... - weiß jemand, wo die Permissions nun definiert werden?

Viele Grüße,
gameboy.
 
OP
V

vgruetzm

Newbie
@gameboy
danke für den Tip,die Datei kannte ich noch gar nicht :idea:
Ich probiere mal, ob ich damit weiter komme.

@Nilres
sowas hatte ich gesucht, hab's aber nicht gefunden. Danke für den Link, ich les mir das mal durch und schau mal, ob ich damit zurecht komme.

@jengelh
Das nvram Modul ist geladen, soweit ich das sehe; lsmod gibt mir folgendes aus:
Code:
ThinkpadT23:/lib/modules/2.6.13-15.18-default # lsmod | grep nvram
nvram                   8328  0
0 heißt doch allerdings soviel wie nicht benutzt, korrekt?
Wie bereits oben erwähnt, unter root funktioniert das alles prima, nur unter einem normalen Benutzer nicht.

An alle nochmal vielen Dank, ich habe jetzt ja erstmal was zu tun
:lol:
 
OP
V

vgruetzm

Newbie
... so, habe einiges ausprobiert, aber noch so richtig keinen Erfolg gehabt.

@Nilres
Habe wie im Link beschrieben ein Script nvramconfig geschrieben:
Code:
### BEGIN INIT INFO 
# Provides: nvramconfig
# Required-Start:
# Required-Stop: 
# Default-Start: 5 
# Default-Stop: 
# Description: make /dev/nvram usable for all users 
### END INIT INFO
/bin/chmod 777 /dev/nvram
Bin mal davon ausgegangen, daß das nur im Runlevel 5 benötigt wird.

Anschließend mit
Code:
chmod +x nvramconfig
ausführbar gemacht, mit
Code:
insserv nvramconfig
aktiviert und einen Link in /usr/sbin mit dem Befehl
Code:
ln -s /etc/init.d/nvramconfig rcnvramconfig
erstellt.
Ich habe unter YaST (YaST -> System -> RunLevel Editor) geprüft, ob das Script auch aktiv ist; es ist! Vielen Dank für den Tip.
Leider startet jetzt nach einem Reboot der X-Server nicht mehr, sondern es gibt nur noch eine Konsole zum einloggen. :cry:
Dabei habe ich folgende interessante Beobachtung gemacht: wenn ich mich auf der Konsole einlogge, sind die Berechtigungen für /dev/nvram richtig gesetzt. Nach einem manuellen Start vom X-Server (startx) sind die Rechte wieder nur für root gesetzt!!! Kann mir mal jemand sagen, welches Script dafür verantwortlich ist ????

@gameboy
Was muß ich in die Datei /etc/logindevperm reinschreiben?
Wäre folgendes richtig?
Code:
:0 0777 /dev/nvram
 

gameboy

Hacker
Hallo vgruetzm,

vgruetzm schrieb:
Was muß ich in die Datei /etc/logindevperm reinschreiben?
Wäre folgendes richtig?
Code:
:0 0777 /dev/nvram
ich denke schon. Vor einiger Zeit hatte ich unter Suse 10.0 das Problem, daß bei zwei parallelen KDE-Sessions nur bei einer der Sound funktioniert hat. Die Lösung waren folgende Einträge in /etc/logindevperm:

Code:
:0 0660 /dev/snd/*
:0 0660 /dev/dsp:/dev/dsp0:/dev/dsp1:/dev/dsp2:/dev/dsp3
Viele Grüße,
gameboy.
 
OP
V

vgruetzm

Newbie
... so, nur zur Info.
Habe versehentlich beim Überprüfen der Scripte im Runlevel-Editor das System unter "Expertenmodus" den Standard-Runlevel nach dem Systemstart versehentlich auf Runlevel 3 gesetzt .... urrgh, Asche auf mein Haupt :?
 
OP
V

vgruetzm

Newbie
Hallo gameboy,
der Tip mit dem Eintrag in /etc/logindevperm scheint prinzipiell zunächst zu funktionieren. Sobald ein Benutzer sich im grafischen System (X-Windows) einloggt, werden die Benutzerrechte aber wieder auf Null gesetzt.
Ich habe folgendes gemacht:

  • * System gestartet
    * auf einer Konsole eingeloggt (nicht im grafischen System)
    * ls -l /dev/nv* gibt aus
    Code:
    root@ThinkpadT23:~> ls -l /dev/nv*
    crw-r--r--  1 root kmem 10, 144 2008-01-13 18:34 /dev/nvram
    * wenn ein normaler Benutzer sich auf der Grafikoberfläche einloggt, erscheint zunächst
    Code:
    root@ThinkpadT23:~> ls -l /dev/nv*
    crwxrwxrwx  1 root kmem 10, 144 2008-01-13 18:34 /dev/nvram
    d.h. der Befehl, bei dem die Rechte für nvram gesetzt werden, funktioniert!
    * kurz darauf werden die Rechte aber wieder auf
    Code:
    root@ThinkpadT23:~> ls -l /dev/nv*
    crw-------  1 root kmem 10, 144 2008-01-13 18:34 /dev/nvram
    gesetzt.
Welcher Dämon ist denn dafür verantwortlich???
 
OP
V

vgruetzm

Newbie
Moin,
nvram ist eine Gerätedatei (character device), die vom KMilo-Plugin von ThinkPad Notebooks benutzt wird und zur Steuerung mit den Thinkpadtasten benötgt wird, das sind die Sondertasten lauter, leiser, stummschalten etc.
Das ganze wird über Kontrollzentrum -> Systemverwaltung -> IBM Thinkpad Notebook eingerichtet.
Damit das funktioniert, muß der Benutzer da reinschreiben dürfen

Gruß,
vgruetzm
 
0 heißt doch allerdings soviel wie nicht benutzt, korrekt?
Wie bereits oben erwähnt, unter root funktioniert das alles prima, nur unter einem normalen Benutzer nicht.
Genau, 0 heißt unbenutzt. Aber geladen heißt geladen :)
Code:
10:20 ichi:~ > l /dev/nvram
ls: cannot access /dev/nvram: No such file or directory
10:20 ichi:~ > su1
10:20 ichi:/home/jengelh # modprobe nvram
10:20 ichi:/home/jengelh # l /dev/nvram
crw------- 1 root kmem 10, 144 Jan 14 10:20 /dev/nvram
Das auf 0666 zu setzen kann man dann mit resmgr (oder udev und Hacks wie logindevperm) machen.
0777 ist fast immer falsch.
 
OP
V

vgruetzm

Newbie
Korrekt, 0777 ist immer falsch, meine auch 0666, da habe ich mich vertan :shock:
Die anderen Tipps probier ich mal aus, vielen Dank

...so, da bin ich wieder.
Zunächst mal vielen Dank für die guten Tips, ich habe mittlerweise schon ein paar Dinge dazugelernt,mein Problem habe ich aber immer noch nicht gelöst.

Also, der Status ist wie folgt:
Ich habe mal die man-pages zu udev gelesen, und dabei bin ich darauf gestoßen, daß es im Verzeichnis /etc/udev eine Datei Namens static_devices.txt gibt. Und siehe da, darin ist auch die von mir gesuchte Datei nvram enthalten, die als statisches Device mit
Code:
nvram c 10 144
angegebn ist. Nichts einfacher als die entsprechenden Rechte angehängt, also
Code:
nvram c 10 144 666
eingetragen, abgespeichert und neu gebootet.
Siehe da, nach dem Booten erscheint die Datei mit den gewünschten Lese- und Schreibrechten rw-rw-rw- (ich habe dazu nach der Anzeige des Login-Fensters auf eine Textkonsole umgeschaltet und mich darunter als root angemeldet). Sobald ich aber den normalen Benutzer über das grafische Login anmelde, werden die Rechte wieder auf rw------ zurückgesetzt. Es muß doch folglich irgendeinen verwarzten Prozeß geben, der nach dem Anmelden eines "normalen" Benutzers angestoßen wird und die Rechte ändert. Hat da irgendjemand eine Idee???

Ergänzung zum Thema logindevperm:
in der Datei /etc/logindevperm ist eine Zeile mit
Code:
:0 0666 /dev/nvram
enthalten, also auch hier habe ich explizit Lese- und Schreibrechte für nvram gesetzt!
 

TomcatMJ

Guru
Für alle die sich fragen was /dev/nvram eigentlich ist: nvram=Non-Volatile-RAM (nicht-flüchtiger Speicher)->Das CMOS-RAM des BIOS
Übrigens kann man Devicerechte genau wie Dateirechte auch in den /etc/permissions.* Dateien setzen. Welche Datei man davon nehmen sollte kommt ganz drauf an auf was man den Security-Level gesetzt hat.

Bis denne,
Tom
 
OP
V

vgruetzm

Newbie
Hallo Tom,
danke für den Hinweis, jetzt weiß ich wenigstens, wofür nvram steht.
Ich habe in permissions.local ja schon die Zeile
Code:
/dev/nvram                  root:kmem       666
eingefügt, um die die Device-Rechte zu ändern, allerdings bisher ohne Erfolg :(
 
OP
V

vgruetzm

Newbie
... so, nach einigen intensiven Studien habe ich eine Lösung gefunden:

Ich bin durch Zufall darauf gestoßen, daß es auf dem System bereit seine Anleitung gibt, die allerdings ein wenig abgeändert werden mußte, damit das alles funktioniert:

/usr/share/doc/packages/tpctl/README.SUSE

Voraussetzung ist generell, daß die Pakete tpb, tpctl, km_tcptl, configure_thinkpad installiert sind.

Zunächst habe ich als root alle normalen Benutzer mit Hilfe von YaST zur Gruppe kmem hinzugefügt:

YaST -> Sicherheit und Benutzer -> Gruppen bearbeiten und anlegen und oben links Gruppen auswählen, unter Filter den Eintrag Systemgruppen auswählen. Die Gruppe kmem auswählen und die entsprechenden Benutzer hinzufügen.

Anschließend in der Datei /etc/udev/static_devices.txt eine Zeile für nvram eingefügt bzw. - falls bereits vorhanden - modifiziert:

Code:
#
# udev.static_devices.txt
#
# List of all devices which have to be created statically as automatic
# detection does not work.
#
# Format:
# name type major minor mode
nvram c 10 144 666

Dann für udev noch folgende Zeile in

/etc/udev/rules.d/50-udev.rules

eingefügen:

Code:
# rule to access /dev/nvram as a normal user
KERNEL=="nvram", NAME="%k", MODE="666", GROUP="kmem", OPTIONS="ignore_remove"

... muß natürlich Kernel=="nvram" heißen, danke für den Hinweis...

Schließlich habe ich in die Datei /etc/sysconfig/kernel noch eingetragen

Code:
MODULES_LOADED_ON_BOOT="nvram"

damit das Modul auf jeden Fall nach dem Start vorhanden ist.

Siehe da, jetzt läßt sich das KMilo Plugin auch als normaler Benutzer im Kontrollzentrum aktivieren und an die persönlichen Wünsche/Bedürfnisse anpassen.
 

Leizar

Newbie
Danke für den Tip - ich möchte noch für die Suse 11 User anmerken, dass nach KERNEL
hier zwei "==" Zeichen stehen müssen:

Code:
ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", OPTIONS+="ignore_remove"

Dann funktioniert das Ganze auch auf meinem R60 mit Suse 11.
 
Oben