Laptopsondertasten abfangen
- 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
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!
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Laptopsondertasten abfangen
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)
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.
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.
- 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
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!
Re: Laptopsondertasten abfangen
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.
- 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
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.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.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Laptopsondertasten abfangen
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.wenn man einfach regelmäßig den Gerätestatus abfragt.
Dazu brauchst du aber keine Tastendrück oder so simulieren.Trotzdem muss ich irgendwie das Ab- bzw. Einschaltereignis auslösen, wenn ich nicht in den kompletten Ablauf eingreifen will.
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.
Was findest du denn da, wenn man fragen darf?Dummerweise findet sich bei mir unter /proc/acpi nicht so viele Informationen.
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.
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.
- 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
Also unter /proc/acip steht folgendes:
Leider war unter keinem der Punkte irgend etwas über Bluetooth oder Wlan zu finden, ich habe schon gesucht.
lsmod:
müssten die Module tg3 und iwlagn sein.
lspci -vvv:
lsusb:
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.
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
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
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
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
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!
- 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
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.
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!
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Laptopsondertasten abfangen
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:
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.
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
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.
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.
- 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
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*)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 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!