Laptopsondertasten abfangen

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Laptopsondertasten abfangen

Beitrag von Bebu » So Mai 16, 2010 8:29 pm

Huhu, ich habe mir mal eine kleine Idee in den Kopf gesetzt. Das ganze ist entstanden, weil sich mein Ubuntu den Schaltzustand für W-Lan und Bluetooth nicht merken kann und ich es immer von Hand abschalten muss. Wie kann ich dieses Tastaturereignis abfangen und auch über ein C++ Programm auslösen, ohne das die Taste wirklich gedrückt wurde? Auf die Weise könnte ich den Schaltzustand nämlich abspeichern und schon beim Start die richtig schalten lassen. Hat jemand eine Idee, wo ich dafür suchen müsste?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Laptopsondertasten abfangen

Beitrag von Dirty Oerti » So Mai 16, 2010 10:34 pm

Hm, deine Idee ist gut, zumindest dein Ziel.
Ich verstehe aber nicht ganz, wozu du dazu die Tasten abfragen musst, frag doch den Status der Geräte direkt ab?
Den Status speicherst du dann in eine Datei, aus der du ihn dann beim nächsten Start wiederherstellen kannst.

Um welche Geräte handelt es sich denn? Was für ein Laptop ist es denn?
Unter /proc/acpi/ erhältst du aber oft gute Informationen.
Bei mir z.B. (IBM Lenovo Thinkpad)

Code: Alles auswählen

daniel@GosigMus:~$ cat /proc/acpi/ibm/bluetooth 
status:		disabled
commands:	enable, disable
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Laptopsondertasten abfangen

Beitrag von Bebu » Mo Mai 17, 2010 5:09 pm

Gut das mit den Tasten könnte man sich eventuell sparen, wenn man einfach regelmäßig den Gerätestatus abfragt. Trotzdem muss ich irgendwie das Ab- bzw. Einschaltereignis auslösen, wenn ich nicht in den kompletten Ablauf eingreifen will. Dummerweise findet sich bei mir unter /proc/acpi nicht so viele Informationen. Ich habe hier ein Acer Travelmate 7730. Trotzdem muss es ja irgendwo eine Möglichkeit geben, den Gerätestatus abzufragen und per Konsole zu ändern. Per rfkill kann ich die Geräte zielgerichtet ab und wieder anschalten, leider arbeiten dann die Tasten auch nicht mehr. Wo registrieren sich den die ganzen Geräte? Irgendwie muss der Status doch an einer einheitlichen Stelle feststellbar sein. Ich würde das Problem gerne ziemlich allgemein lösen, bin ja nicht der einzige mit dem Problem. Das Programm selber ist ja nur eine Kleinigkeit, wenn ich erst einmal weiß, wo ich den Status abfragen und verändern kann. Gibt es hier einen Ubuntuunterbauexperten? (cooles Wort^^)
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Laptopsondertasten abfangen

Beitrag von nufan » Mo Mai 17, 2010 5:18 pm

Warum legst du dir nicht einfach einen Shortcut auf die Laptop-Sondertasten? Den Shortcut verbindest du mit einem Programm, das den Status des Geräts mittels ifconfig ändert.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Laptopsondertasten abfangen

Beitrag von Bebu » Mo Mai 17, 2010 7:14 pm

dani93 hat geschrieben:Warum legst du dir nicht einfach einen Shortcut auf die Laptop-Sondertasten? Den Shortcut verbindest du mit einem Programm, das den Status des Geräts mittels ifconfig ändert.
Weil mir die Lösung zu geflickt ist und ich auch eine Lösung für Bluetooth und andere Geräte suche. Außerdem habe ich gerade den Ehrgeiz, das ganz so zu lösen, das man das ganze nur als .deb installieren muss und das Problem damit los ist.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Laptopsondertasten abfangen

Beitrag von Dirty Oerti » Mo Mai 17, 2010 7:44 pm

wenn man einfach regelmäßig den Gerätestatus abfragt.
Nichts regelmäßig, was du brauchts (so wie ich das verstehe) wäre ein Start und Shutdown Skript, was dir beim Shutdown den Gerätestatus speichert und ihn beim nächsten Start ausliest und wieder herstellt.
Trotzdem muss ich irgendwie das Ab- bzw. Einschaltereignis auslösen, wenn ich nicht in den kompletten Ablauf eingreifen will.
Dazu brauchst du aber keine Tastendrück oder so simulieren.
In Linux ist so gut wie alles auf das Dateisystem gemappt.
Sprich irgendwo unterhalb von / findest du die genauen Geräteinformationen samt Status und Kontrolschnittstellen.
Du musst nur finden, wo.
Dummerweise findet sich bei mir unter /proc/acpi nicht so viele Informationen.
Was findest du denn da, wenn man fragen darf?

Welche Geräte müssen denn alles angesprochen werden? Wie sieht es mit den Modulen aus? Welche sind geladen?
lsmod
lspic -vvv
lsusb -vvv
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Laptopsondertasten abfangen

Beitrag von Bebu » Mo Mai 17, 2010 8:38 pm

Also unter /proc/acip steht folgendes:

Code: Alles auswählen

/proc/acpi$ ls
ac_adapter  dsdt  fadt  power_resource  thermal_zone
battery     embedded_controller  fan   processor       video
button      event                info  sleep           wakeup
Leider war unter keinem der Punkte irgend etwas über Bluetooth oder Wlan zu finden, ich habe schon gesucht.

lsmod:

Code: Alles auswählen

Module                  Size  Used by
rfcomm                 40329  0 
binfmt_misc             7960  1 
sco                     9617  0 
ppdev                   6375  0 
bridge                 53152  0 
stp                     2171  1 bridge
bnep                   11820  0 
l2cap                  34774  4 rfcomm,bnep
joydev                 11072  0 
snd_hda_codec_nvhdmi     4760  1 
snd_hda_codec_realtek   278890  1 
btusb                  12969  0 
bluetooth              58621  5 rfcomm,sco,bnep,l2cap,btusb
uvcvideo               62403  0 
videodev               40486  1 uvcvideo
v4l1_compat            15495  2 uvcvideo,videodev
v4l2_compat_ioctl32    12020  1 videodev
psmouse                64608  0 
serio_raw               4918  0 
video                  20623  0 
output                  2503  1 video
acer_wmi               15829  0 
pcmcia                 35548  0 
jmb38x_ms               8643  0 
memstick               10121  1 jmb38x_ms
arc4                    1473  2 
iwlagn                121577  0 
iwlcore               124955  1 iwlagn
mac80211              238128  2 iwlagn,iwlcore
sdhci_pci               6700  0 
sdhci                  17928  1 sdhci_pci
led_class               3732  3 acer_wmi,iwlcore,sdhci
cfg80211              148386  3 iwlagn,iwlcore,mac80211
fbcon                  39270  71 
tileblit                2487  1 fbcon
font                    8053  1 fbcon
bitblit                 5811  1 fbcon
softcursor              1565  1 bitblit
snd_hda_intel          25645  4 
snd_hda_codec          85727  3 snd_hda_codec_nvhdmi,snd_hda_codec_realtek,snd_hda_intel
snd_hwdep               6924  1 snd_hda_codec
snd_pcm_oss            41394  0 
snd_mixer_oss          16299  1 snd_pcm_oss
snd_pcm                87850  4 snd_hda_intel,snd_hda_codec,snd_pcm_oss
snd_seq_dummy           1782  0 
snd_seq_oss            31219  0 
snd_seq_midi            5829  0 
snd_rawmidi            23388  1 snd_seq_midi
snd_seq_midi_event      7267  2 snd_seq_oss,snd_seq_midi
snd_seq                57417  6 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event
snd_timer              23553  2 snd_pcm,snd_seq
snd_seq_device          6824  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq
snd                    70978  19 snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq_oss,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
yenta_socket           22901  1 
rsrc_nonstatic          9830  1 yenta_socket
pcmcia_core            38144  3 pcmcia,yenta_socket,rsrc_nonstatic
intel_agp              29225  0 
soundcore               8052  1 snd
snd_page_alloc          8500  2 snd_hda_intel,snd_pcm
nvidia              10799466  40 
vga16fb                12757  1 
vgastate                9857  1 vga16fb
lp                      9336  0 
parport                37160  2 ppdev,lp
usbhid                 40988  0 
hid                    83376  1 usbhid
usb_storage            49833  2 
ahci                   37646  3 
tg3                   122350  0 
müssten die Module tg3 und iwlagn sein.

lspci -vvv:

Code: Alles auswählen

00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
	Latency: 0
	Capabilities: <access denied>
	Kernel modules: intel-agp

00:01.0 PCI bridge: Intel Corporation Mobile 4 Series Chipset PCI Express Graphics Port (rev 07)
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
	I/O behind bridge: 00002000-00002fff
	Memory behind bridge: cc000000-ceffffff
	Prefetchable memory behind bridge: 00000000d0000000-00000000dfffffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA- VGA+ MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport
	Kernel modules: shpchp

00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 16
	Region 4: I/O ports at 1800 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin B routed to IRQ 21
	Region 4: I/O ports at 1820 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin C routed to IRQ 19
	Region 4: I/O ports at 1840 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03) (prog-if 20)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin C routed to IRQ 19
	Region 0: Memory at f0604800 (32-bit, non-prefetchable) [size=1K]
	Capabilities: <access denied>
	Kernel driver in use: ehci_hcd

00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 22
	Region 0: Memory at f0600000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: <access denied>
	Kernel driver in use: HDA Intel
	Kernel modules: snd-hda-intel

00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=02, subordinate=04, sec-latency=0
	I/O behind bridge: 00003000-00003fff
	Memory behind bridge: c4000000-c41fffff
	Prefetchable memory behind bridge: 00000000c4200000-00000000c43fffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport
	Kernel modules: shpchp

00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03)
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=06, subordinate=06, sec-latency=0
	I/O behind bridge: 00004000-00004fff
	Memory behind bridge: c4400000-c45fffff
	Prefetchable memory behind bridge: 00000000c4600000-00000000c47fffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport
	Kernel modules: shpchp

00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=07, subordinate=07, sec-latency=0
	I/O behind bridge: 00005000-00005fff
	Memory behind bridge: c4800000-c49fffff
	Prefetchable memory behind bridge: 00000000c4a00000-00000000c4bfffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport
	Kernel modules: shpchp

00:1c.5 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 6 (rev 03)
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=09, subordinate=09, sec-latency=0
	I/O behind bridge: 00006000-00006fff
	Memory behind bridge: c4c00000-c4dfffff
	Prefetchable memory behind bridge: 00000000c4e00000-00000000c4ffffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport
	Kernel modules: shpchp

00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 23
	Region 4: I/O ports at 1860 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin B routed to IRQ 19
	Region 4: I/O ports at 1880 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin C routed to IRQ 18
	Region 4: I/O ports at 18a0 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03) (prog-if 20)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 23
	Region 0: Memory at f0604c00 (32-bit, non-prefetchable) [size=1K]
	Capabilities: <access denied>
	Kernel driver in use: ehci_hcd

00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93) (prog-if 01)
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Bus: primary=00, secondary=0a, subordinate=0e, sec-latency=0
	I/O behind bridge: 00007000-00007fff
	Memory behind bridge: f0500000-f05fffff
	Prefetchable memory behind bridge: 00000000c0000000-00000000c3ffffff
	Secondary status: 66MHz- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>

00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Capabilities: <access denied>
	Kernel modules: iTCO_wdt

00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03) (prog-if 01)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin B routed to IRQ 29
	Region 0: I/O ports at 18f0 [size=8]
	Region 1: I/O ports at 18e4 [size=4]
	Region 2: I/O ports at 18e8 [size=8]
	Region 3: I/O ports at 18e0 [size=4]
	Region 4: I/O ports at 18c0 [size=32]
	Region 5: Memory at f0604000 (32-bit, non-prefetchable) [size=2K]
	Capabilities: <access denied>
	Kernel driver in use: ahci
	Kernel modules: ahci

00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Interrupt: pin C routed to IRQ 10
	Region 0: Memory at c5000000 (64-bit, non-prefetchable) [size=256]
	Region 4: I/O ports at 1c00 [size=32]
	Kernel modules: i2c-i801

01:00.0 VGA compatible controller: nVidia Corporation G96 [GeForce 9600M GT] (rev a1)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 16
	Region 0: Memory at ce000000 (32-bit, non-prefetchable) [size=16M]
	Region 1: Memory at d0000000 (64-bit, prefetchable) [size=256M]
	Region 3: Memory at cc000000 (64-bit, non-prefetchable) [size=32M]
	Region 5: I/O ports at 2000 [size=128]
	Capabilities: <access denied>
	Kernel driver in use: nvidia
	Kernel modules: nvidia-current, nvidiafb, nouveau

06:00.0 System peripheral: JMicron Technology Corp. SD/MMC Host Controller
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 18
	Region 0: Memory at c4400000 (32-bit, non-prefetchable) [size=256]
	[virtual] Expansion ROM at c4600000 [disabled] [size=64K]
	Capabilities: <access denied>
	Kernel driver in use: sdhci-pci
	Kernel modules: sdhci-pci

06:00.2 SD Host controller: JMicron Technology Corp. Standard SD Host Controller (prog-if 01)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Interrupt: pin A routed to IRQ 18
	Region 0: Memory at c4400100 (32-bit, non-prefetchable) [size=256]
	Capabilities: <access denied>
	Kernel modules: sdhci-pci

06:00.3 System peripheral: JMicron Technology Corp. MS Host Controller
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 18
	Region 0: Memory at c4400200 (32-bit, non-prefetchable) [size=256]
	Capabilities: <access denied>
	Kernel driver in use: jmb38x_ms
	Kernel modules: jmb38x_ms

06:00.4 System peripheral: JMicron Technology Corp. xD Host Controller
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 10
	Region 0: Memory at c4400300 (32-bit, non-prefetchable) [size=256]
	Capabilities: <access denied>

07:00.0 Network controller: Intel Corporation Wireless WiFi Link 5100
	Subsystem: Intel Corporation Device 1201
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 30
	Region 0: Memory at c4800000 (64-bit, non-prefetchable) [size=8K]
	Capabilities: <access denied>
	Kernel driver in use: iwlagn
	Kernel modules: iwlagn

09:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5764M Gigabit Ethernet PCIe (rev 10)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 31
	Region 0: Memory at c4c00000 (64-bit, non-prefetchable) [size=64K]
	Capabilities: <access denied>
	Kernel driver in use: tg3
	Kernel modules: tg3

0a:04.0 CardBus bridge: O2 Micro, Inc. OZ601/6912/711E0 CardBus/SmartCardBus Controller (rev 40)
	Subsystem: Acer Incorporated [ALI] Device 013d
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping+ SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 168
	Interrupt: pin A routed to IRQ 16
	Region 0: Memory at f0500000 (32-bit, non-prefetchable) [size=4K]
	Bus: primary=0a, secondary=0b, subordinate=0e, sec-latency=176
	Memory window 0: c0000000-c3fff000 (prefetchable)
	Memory window 1: c8000000-cbfff000
	I/O window 0: 00007000-000070ff
	I/O window 1: 00007400-000074ff
	BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset- 16bInt+ PostWrite+
	16-bit legacy interface ports at 0001
	Kernel driver in use: yenta_cardbus
	Kernel modules: yenta_socket
lsusb:

Code: Alles auswählen

Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 08ff:1600 AuthenTec, Inc. AES1600
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 046d:c052 Logitech, Inc. 
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 152d:2329 JMicron Technology Corp. / JMicron USA Technology Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 064e:a103 Suyin Corp. 
Bus 001 Device 003: ID 152d:2509 JMicron Technology Corp. / JMicron USA Technology Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
die Optione -vvv sprengt irgendwie den Terminalspeicher und wird abgeschnitten.

Ich würde mein Programm gerne so schreiben, das das Ganze auf jedem Laptop mit dem Problem funktioniert, darum wäre eine allgemeine Schnittstelle nicht schlecht.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Laptopsondertasten abfangen

Beitrag von Bebu » Di Mai 18, 2010 3:29 am

Also ich glaube ich habe die Lösung für mein Problem gefunden: Über /sys/class/rfkill kann man den Schaltzustand der Geräte abfragen und über die Datei state auch beeinflussen bzw. abfragen. Mit diesem Wissen sollte ich in der Lage sein, ein Programm zu schreiben, das den Status aller dort aufgeführten Geräte auslesen, Speichern und beim Systemstart wiederherstellen kann. Das ganze will ich als Hintergrundprozess ins System einbinden. Der Prozess soll dann regelmäßig den Status überprüfen und Veränderungen abspeichern und beim nächsten Neustart den letzten Zustand wiederherstellen.

Es stellen sich mir jetzt noch zwei Fragen: Wie muss ein Programm aussehen, das im Hintergrund laufen soll? Muss man so etwas als Endlosschleife schreiben, oder gibt es eine Möglichkeit das Programm immer bestimmte Zeitintervalle idlen zu lassen, bzw darauf zu lauschen, ob sich bestimmte Dateien verändert haben oder nicht?

Kennt jemand einen Systembefehlssatz unter Linux, mit dem sich Verzeichnisse so gut verarbeiten lassen, wie mit Boost Filesystem? Wenn es geht, würde ich die Boost-Library gerne außen vor lassen, weil das Programm nicht plattformunabhängig sein soll und ich es möglichst klein halten will. Mir geht es vor allem darum, Verzeichnisse zu zählen und Pfadangaben zu zerlegen.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Laptopsondertasten abfangen

Beitrag von Dirty Oerti » Di Mai 18, 2010 8:46 pm

Gut, über das /sys/ Interface funktioniert es auch.
Eine wirklich allgemeine Schnittstelle gibt es nämlich auf Grund der vielen Unterschiede nicht.

Ich verstehe dein Problem immernoch nicht ganz.
Du brauchst dafür keinen Prozess, der irgendetwas macht, während der Computer läuft.

Beim Systemstart (Boot, Resume) liest du Werte aus einer Datei und transferierst sie nach /sys/class/rfkill/rfkillX/state
Und bei Systemende (Shutdown, Suspend, Hibernate) speicherst du die Werte aus /sys/ eben in die entsprechenden Dateien.

Ein Programm, dass im Hintergrund laufen soll und einfach nur über das Dateisystem gucken soll, wie der Status der Geräte ist, muss wohl auf Polling zurückgreifen (ich weiß, dass es auch irgendwie anders gehen muss, weiß aber leider nicht wie). Heißt das Programm muss in einem Zeitintervall die Datei öffnen, auslesen, und dann dem entsprechend handeln.
Ich hab mir das was für meinen Server hier geschrieben. Das Bash-Skript schaut alle 10 Sekunden, ob der Netzstecker noch am System ist (es handelt sich um ein altes Laptop mit noch einigermaßen funktionstüchtigem Akku) und fährt das System nach 90 Sekunden ohne Netzstrom sauber herunter.
Das brauchst du aber in deinem Fall ja nicht.
Du willst nur einen Zustand wiederherstellen. Dazu musst du ihn EINMAL speichern und EINMAl auslesen.

Im Prinzip so wie:

Code: Alles auswählen

# Systemende
cat /sys/class/rfkill/rfkill0/state > /etc/devicecontrol/device0_state

# Systemstart
cat /etc/devicecontrol/device0_state > /sys/class/rfkill/rfkill0/state
Das ganze kannst du dann natürlich noch dynamisch ausbauen (automatisch alle Killswitches finden und am besten noch benennen) oder eben als C/C++ Programm implementieren.
Verzeichnisse auslesen ist nicht schwer:

http://www.hs-augsburg.de/~sandman/c_vo ... F31F02C1B0

Damit und mit fopen ist alles machbar.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Laptopsondertasten abfangen

Beitrag von Bebu » Di Mai 18, 2010 9:28 pm

Dirty Oerti hat geschrieben: Ich verstehe dein Problem immernoch nicht ganz.
Du brauchst dafür keinen Prozess, der irgendetwas macht, während der Computer läuft.
...
Du willst nur einen Zustand wiederherstellen. Dazu musst du ihn EINMAL speichern und EINMAl auslesen.
...
Das ganze kannst du dann natürlich noch dynamisch ausbauen (automatisch alle Killswitches finden und am besten noch benennen) oder eben als C/C++ Programm implementieren.
Das ich den Hintergrundprozess nicht brauche ist mir klar, aber ich würde es einen Anfall von Perfektionismus nennen. Auf diese Weise, wird der Zustand auch gespeichert, wenn das System nicht sauber beendet wird. Und das ganze dynamisch auszubauen habe ich vor und zwar als C++ Programm, das automatisch den Zustand aller Killswitches ausliest, speichert und beim Systemstart wiederherstellt. Ich hoffe, das ich damit das Problem für viele andere gleich mitlösen kann und das ganze vielleicht sogar irgendwann fest in Ubuntu integriert wird. (*träum*)

Das ganze wird auch ein bisschen mehr Aufwand als ursprünglich geplant, immerhin muss ich davon ausgehen, das nicht jedes Device immer die gleiche Killswitchnummer hat und sich da nie etwas verändert, z. B. weil ein neues Gerät dazukommt. Es wird also ein ausgewachsenes "kleines" Projekt. Ich schätze ich werde es dann einfach mit einer Endlosschleife lösen, die immer für einige Tausend Runden nichts tut.

Danke für die Hilfe beim Verzeichnislesen, das ist genau das, was ich gesucht habe.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Antworten