PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lirc während ein Programm läuft



floe-de
26.04.06, 18:08
Hi,

ich hab es nun endlich hinbekommen meine Fernbedienung einzurichten.
Mit Kommandos für Totem, amaroK (irexec), MythTV und TVTime (irexec).

Nun habe ich aber festgestellt, das ich die Fernbedienung nicht benutzen kann
wenn ich die Programm manuell über ein Icon starte.

Bei MythTV und Totem geht es, da sie eine Native Schnittstelle haben nur
amaroK und TVTime funktionieren nicht, da sie das Helper-Programm irexec
benutzen welches als Deamon im Hintergund läuft.

In der Steuerdatei .lircrc habe ich diverse Mode Befehle eingesetzt damit
Lirc die diversen Programme und ihre Befehle unterscheiden kann.

Nun hab ich mir überlegt ich müsste z.B. TVTime beim Start ja nur mitgeben,
das Lirc sich in Mode = tvtime umschalten soll damit ich die Fernbedienung
benutzen kann. Ist dieses Umschalten des Modus möglich ?
(Habe noch nie etwas davon gelesen)

Ede
27.04.06, 00:37
Ich habe keins der 4 Programme jemals mit lirc bedient oder drauf gehabt, dafür aber zapping, kdetv, mplayer, xine und xmms.
Bevor du von der mode-Funktion Gebrauch machst, solltest du dich mit der Bedienung jedes einzelnen Programms vertraut machen, dich informieren, welche Befehle genau das jeweilige Programm steuern, sicher stellen dass irexec mit dem jeweiligen Programm kommuniziert und dir überlegen, welche Steuerkommandos des Programms du am Ende benutzen willst. Wenn du gleich mit mode loslegst, machst du die Fehlersuche unnötig kompliziert und kommst ganz schnell durcheinander.
Du legst also zuerst die Datei ~/.lircrc für amarok an und spielst damit rum. Dann sicherst du die ~/.lircrc für amarok unter einem anderen Namen, legst die Datei ~/.lircrc für tvtime an, spielst damit rum usw.
Wenn du Modifikationen in ~/.lircrc wirken lassen willst, speicherst du die Datei ab, beendest mit
killall -15 irexec irexec und startest es direkt mit
irexec neu.

Hier ist meine ~/.lircrc mit den wichtigsten Funktionen für zapping, mplayer, xine und xmms.

begin
prog = irexec
button = tv_pr_down
config = halt
end
begin
prog = irexec
button = tv_pr_up
config = reboot
end
begin
prog = irexec
button = vcr_play
config = /usr/bin/xterm -bg darkblue -fg yellow -e "mplayer -nojoystick ~/.wmrecord/rec.wav" &
end
begin
prog = irexec
button = vcr_record
config = /usr/bin/xterm -bg darkblue -fg yellow -e "arecord -v -f cd -D record -t wav ~/.wmrecord/rec.wav" &
end
begin
prog = irexec
button = vcr_stop
config = killall -15 arecord
end

###########################
# Programmstart #
###########################

begin
prog = irexec
button = dvd_mode
config = xmms -p &
end
begin
prog = irexec
button = vcr_power
config = /opt/gnome/bin/zapping &
end
begin
prog = irexec
button = dvd_power
config = gmplayer -nojoystick &
end
begin
prog = irexec
button = vcr_av
config = mplayer -nojoystick -fs -tv driver=v4l:width=480:height=360 tv://36 &
end
begin
prog = irexec
button = dvd_av
config = xine &
end

###########################
# xmms #
###########################

begin
prog = xmms
button = dvd_play
config = PLAY
end
begin
prog = xmms
button = dvd_pause
config = PAUSE
end
begin
prog = xmms
button = dvd_stop
config = STOP
end
begin
prog = xmms
button = dvd_pr_up
config = NEXT
end
begin
prog = xmms
button = dvd_pr_down
config = PREV
end

begin
prog = xmms
button = dvd_fwd
config = FWD 3
repeat = 2
end
begin
prog = xmms
button = dvd_rev
config = BWD 3
repeat = 2
end

begin
prog = xmms
button = dvd_open
config = FWD 60
repeat = 2
end
begin
prog = xmms
button = dvd_again
config = BWD 60
repeat = 2
end
begin
prog = xmms
button = dvd_lock
config = SHUFFLE
end
begin
prog = xmms
button = dvd_cam
config = REPEAT
end
begin
prog = xmms
button = dvd_zoom
config = QUIT
end

###########################
# zapping #
###########################

begin
prog = zapping_lirc
button = vcr_clear
config = ZOOM
end
begin
prog = zapping_lirc
button = vcr_pr_up
config = CHANUP
end
begin
prog = zapping_lirc
button = vcr_pr_down
config = CHANDOWN
end
begin
prog = zapping_lirc
button = vcr_pr0
config = SETCHANNEL 0
end
begin
prog = zapping_lirc
button = vcr_pr1
config = SETCHANNEL 1
end
begin
prog = zapping_lirc
button = vcr_pr2
config = SETCHANNEL 2
end
begin
prog = zapping_lirc
button = vcr_pr3
config = SETCHANNEL 3
end
begin
prog = zapping_lirc
button = vcr_pr4
config = SETCHANNEL 4
end
begin
prog = zapping_lirc
button = vcr_pr5
config = SETCHANNEL 5
end
begin
prog = zapping_lirc
button = vcr_pr6
config = SETCHANNEL 6
end
begin
prog = zapping_lirc
button = vcr_pr7
config = SETCHANNEL 7
end
begin
prog = zapping_lirc
button = vcr_pr8
config = SETCHANNEL 8
end
begin
prog = zapping_lirc
button = vcr_pr9
config = SETCHANNEL 9
end
begin
prog = zapping_lirc
button = vcr_zoom
config = QUIT
end

###########################
# mplayer #
###########################

begin
button = dvd_clear
prog = mplayer
config = vo_fullscreen
end
begin
prog = mplayer
button = dvd_left
repeat = 2
config = contrast -1
end
begin
prog = mplayer
button = dvd_right
repeat = 2
config = contrast +1
end
begin
prog = mplayer
button = dvd_down
repeat = 2
config = brightness -1
end
begin
prog = mplayer
button = dvd_up
repeat = 2
config = brightness +1
end
begin
button = vcr_clear
prog = mplayer
config = vo_fullscreen
end
begin
prog = mplayer
button = vcr_left
repeat = 2
config = contrast -1
end
begin
prog = mplayer
button = vcr_right
repeat = 2
config = contrast +1
end
begin
prog = mplayer
button = vcr_down
repeat = 2
config = brightness -1
end
begin
prog = mplayer
button = vcr_up
repeat = 2
config = brightness +1
end
begin
prog = mplayer
button = dvd_menu
config = osd
end
begin
button = dvd_pause
prog = mplayer
config = pause
end
begin
button = dvd_rev
prog = mplayer
config = seek -3
repeat = 2
end
begin
button = dvd_fwd
prog = mplayer
config = seek +3
repeat = 2
end
begin
button = dvd_again
prog = mplayer
config = seek -60
repeat = 2
end
begin
button = dvd_open
prog = mplayer
config = seek +60
repeat = 2
end
begin
button = vcr_pause
prog = mplayer
config = pause
end
begin
button = vcr_rev
prog = mplayer
config = seek -3
repeat = 2
end
begin
button = vcr_fwd
prog = mplayer
config = seek +3
repeat = 2
end
begin
button = vcr_again
prog = mplayer
config = seek -60
repeat = 2
end
begin
button = vcr_open
prog = mplayer
config = seek +60
repeat = 2
end
begin
button = dvd_pr_up
prog = mplayer
config = pt_step 1
end
begin
button = dvd_pr_down
prog = mplayer
config = pt_step -1
end
begin
button = dvd_stop
prog = mplayer
config = seek 0 1\npause
end
begin
button = dvd_zoom
prog = mplayer
config = quit
end
begin
button = vcr_zoom
prog = mplayer
config = quit
end
###########################
# xine #
###########################

begin
button = dvd_pause
prog = xine
config = Pause
end
begin
button = dvd_stop
prog = xine
config = Stop
end
begin
button = dvd_pr_up
prog = xine
config = NextMrl
end
begin
button = dvd_pr_down
prog = xine
config = PriorMrl
end
begin
button = dvd_fwd
prog = xine
config = SpeedFaster
end
begin
button = dvd_rev
prog = xine
config = SpeedSlower
end
begin
button = dvd_play
prog = xine
config = SpeedReset
end
begin
button = dvd_again
prog = xine
config = seek -60
repeat = 2
end
begin
button = dvd_open
prog = xine
config = seek +60
repeat = 2
end
begin
button = dvd_pr1
prog = xine
config = SetPosition10%
end
begin
button = dvd_pr2
prog = xine
config = SetPosition20%
end
begin
button = dvd_pr3
prog = xine
config = SetPosition30%
end
begin
button = dvd_pr4
prog = xine
config = SetPosition40%
end
begin
button = dvd_pr5
prog = xine
config = SetPosition50%
end
begin
button = dvd_pr6
prog = xine
config = SetPosition60%
end
begin
button = dvd_pr7
prog = xine
config = SetPosition70%
end
begin
button = dvd_pr8
prog = xine
config = SetPosition80%
end
begin
button = dvd_pr9
prog = xine
config = SetPosition90%
end
begin
button = dvd_clear
prog = xine
config = ToggleFullscreen
end
begin
button = dvd_menu
prog = xine
config = OSDStreamInfos
end
begin
button = dvd_info
prog = xine
config = Menu
end
begin
button = dvd_timer
prog = xine
config = TitleMenu
end
begin
prog = xine
button = dvd_title
config = RootMenu
end
begin
button = dvd_up
prog = xine
config = EventUp
end
begin
button = dvd_down
prog = xine
config = EventDown
end
begin
button = dvd_right
prog = xine
config = EventRight
end
begin
button = dvd_left
prog = xine
config = EventLeft
end
begin
button = dvd_ok
prog = xine
config = EventSelect
end
begin

button = dvd_record
prog = xine
config = Snapshot
end
begin
prog = xine
button = dvd_zoom
config = Quit
end

###########################
# Lautstärke #
###########################

begin
prog = irexec
button = mute
config = amixer set PCM mute &
config = amixer set PCM unmute &
end
begin
prog = irexec
button = mute
config = amixer set CD mute &
config = amixer set CD unmute &
end
begin
prog = irexec
button = dvd_return
config = amixer set Line mute &
config = amixer set Line unmute &
end
begin
prog = irexec
button = vcr_return
config = amixer set Line mute &
config = amixer set Line unmute &
end
begin
prog = irexec
button = vol_up
config = amixer set PCM 3%+ &
repeat = 2
end
begin
prog = irexec
button = vol_down
config = amixer set PCM 3%- &
repeat = 2
end
begin
prog = irexec
button = vol_up
config = amixer set CD 3%+ &
repeat = 2
end
begin
prog = irexec
button = vol_down
config = amixer set CD 3%- &
repeat = 2
end

begin
prog = irexec
button = vol_up
config = amixer set Line 3%+ &
repeat = 2
end
begin
prog = irexec
button = vol_down
config = amixer set Line 3%- &
repeat = 2
end
Wie du siehst, kommt es auf prog = xine an, wenn man xine steuern will, während es läuft. prog = irexec wäre falsch, da irexec einen Befehl nicht an xine weiter leiten sondern wie einen einfachen Befehl in der Konsole auffassen würde.
Und mit SetPosition80% (als Beispiel) weiß die Konsole nichts anzufangen.
prog = irexec kann also nur bei einem Befehl stehen, den du auch in der Konsole eingeben kannst.

Mit mode habe ich nichts gemacht, weil mir schon die 3 Modi, die die Fernbedienung hardwaremäßig mitbringt, ausreichen. Mehr als genug Knöpfe, wie du unschwer erkennen kannst: http://lirc.sourceforge.net/remotes/thomson/RCT311DA2
Reicht für die ganzen Multimedia-Programme und dazu noch für die Steuerung des Mauscursors.

floe-de
27.04.06, 09:29
Ich glaub da haben wir uns missverstanden ich meinte nicht den Modus der
Fernbedienung sondern den Modus von Lirc um zu erkennen welches Programm
gerade läuft.

(Auschnitt Programmstart mit Modus angabe, Punkte von mir eingefügt)

begin
........prog = irexec
........button = tv
........config = /usr/bin/tvtime &
........config = tvtime-command QUIT
........mode = tvtime
end
begin
........prog = irexec
........button = vcr
........config = /usr/bin/mythtv &
........mode = mythtv
end

Wenn ich nun vor dem Computer sitze und TVTime per Icon starte ohne die
Fernbedienung, bekommt Lirc nicht mit das wenn ich mich doch entschließe die
Fernbedienung zu benutzen nun die TVTime Tasten aktiv sein sollen.

(Ausschnitt TVTime Verarbeitung)
begin tvtime
begin
........prog = irexec
........button = chan_plus
........repeat = 0
........config = tvtime-command UP
end
end tvtime

Leider unterstützt TVTime und amarok keine direkte Verarbeitung der Befehle
sondern, wie du schon sagtest müssen die Befehle per irexec in gedrückte
Tasten umgewandelt werden.

Deine Programme Zapping, XMMS, Xine und MPlayer unterstützen alle die
direkte Verarbeitung, daher solltest du nicht meine Probleme haben, aber
danke für deine .lircrc Datei sind wirklich nützliche Informationen enthalten.

Problem besteht noch, wie schalte ich manuell den Modus um ?

floe-de
27.04.06, 09:41
Ich hab so ein kleines Workaround gefunden.
(bzw. war mir schon irgendwie klar ist aber nicht der tollste Weg)

Da das starten und beenden meiner Programme (TVTime und amarok)
geht auch während eines davon schon läuft. Beende ich es kurz per
Fernbedienung und starte es dann wieder von Fernbedienung damit hat sich
auch der Mode geändert und ich kann alle Kommandos für das Programm benutzen.

Hier noch ein wenig Infos zu dem Thema unteranderem die 3 Arten von
Lirc Unterstützung in Applicationen
http://www.raoul.shacknet.nu/2006/01/10/how-to-configure-and-use-lirc/

Ede
27.04.06, 11:45
Ich glaub da haben wir uns missverstanden ich meinte nicht den Modus der
Fernbedienung sondern den Modus von Lirc um zu erkennen welches Programm
gerade läuft.
Es ist so: Lirc/irexec weiß nicht, welches Programm gerade läuft. Wenn ein Befehl mit "prog = xine" ankommt, versucht irexec halt, den Befehl an xine weiterzuleiten. Wenn xine läuft, kommt der Befehl an, wenn nicht, dann nicht.
mode dient nur dazu, die Anzahl der Tasten auf deiner Fernbedienung virtuell zu erhöhen bzw. dazu, beim Drücken einer Taste, die mit 2 verschiedenen Befehlen belegt ist, nur denjenigen Befehl auszuführen, der zum mode deiner Wahl gehört.
Ein Beispiel: Du willst mit den 2 Tasten Laustärke_hoch und Laustärke_runter wahlweise die Laustärke von PCM oder Line regulieren. Dann musst du 2 andere Tasten definieren (eine versetzt LIRC in den PCM mode, die andere in den Line mode). So kannst du dann auszuwählen, ob beim anschließenden Drücken der Laustärke-Tasten PCM oder Line reguliert werden soll. Vorausgesetzt du willst nicht beides gleichzeitig regulieren.


(Auschnitt Programmstart mit Modus angabe, Punkte von mir eingefügt)

begin
........prog = irexec
........button = tv
........config = /usr/bin/tvtime &
........config = tvtime-command QUIT
........mode = tvtime
end
begin
........prog = irexec
........button = vcr
........config = /usr/bin/mythtv &
........mode = mythtv
end

Wenn ich nun vor dem Computer sitze und TVTime per Icon starte ohne die
Fernbedienung, bekommt Lirc nicht mit das wenn ich mich doch entschließe die
Fernbedienung zu benutzen nun die TVTime Tasten aktiv sein sollen.

(Ausschnitt TVTime Verarbeitung)
begin tvtime
begin
........prog = irexec
........button = chan_plus
........repeat = 0
........config = tvtime-command UP
end
end tvtime

Das ist natürlich wahr. Wenn du es so mit mode machst und das Programm per Icon startest, wechselt Lirc nicht in den mode tvtime. Das macht Lirc eben nicht von alleine, was auch sinnvoll ist. In welchen mode sollte Lirc denn wechseln, wenn 2 verschiedene Programme laufen? Den mode mußt immer du auswählen, je nachdem, was du grade bedienen willst. Bei dem Beispiel oben müßtest du also eine Taste definieren, die nichts anderes macht außer in einen bestimmten mode zu wechseln. Bei deinem Beispiel ist ja die Taste, die in den tvtime-mode wechselt gleichzeitig die Taste, die tvtime aktiviert. Dann ist es halt schlecht, wenn du tvtime per Icon aktivierst, weil Lirc sich dann nicht in den tvtime-mode versetzt. Du kannst mode auch einfach ganz weglassen. Dann wird das Programm bedient, das gerade läuft. Wenn 2 Programme laufen, werden beide auf die Fernbedienung reagieren. Im Hinblick auf die Tatsache, dass kein normaler Mensch gleizeitig TV guckt und Musik hört, also nicht gleichzeitig ein TV-Programm und ein Musik-Programm läuft, ist die Benutzung der mode-Funktion nicht nötig. Denn wenn das TV-Programm läuft, wird das TV-Programm gesteuert, wenn das Musik-Programm läuft, wird das Musik-Programm gesteurt. Das ist ja das, was du willst. Dann muß man nur aufpassen, dass man eine Taste, mit der man ein laufendes Programm A bedient, nicht gleichzeitig als Startknopf eines anderen Programms B belegt. Du kannst ja mit einem Knopf unendlich viele Befehle/Funktionen verbinden.