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

Fernbedienung: irkick besser nutzen

Hi,

ich habe mich wieder grad ein bisschen mit lirc herumgespielt.
Nachdem nun auch endlich eine geeignete lirc.conf Datei für meine Fernbedienung gefuden hab, frag ich mich, was es jetzt noch zu verbessern gibt ;-)

Spontan fällt mir da was ein.
Es gibt ja in irkick (kde programm zum verwalten von fernsteuerungen) erweiterungen (extensions). Hat jemand eine Ahnung, wo ich weitere extensions bekomme oder wie ich mir selbst welche schreiben kann (ich find einfach keine Beschreibungsdateien für die extensinos auf meiner hd)

Kann mir wer helfen?
Niko
 
Hallo Niko_K,

ich habe mir auch kürzlich irkick angesehen. Ist zwar ganz nett gemacht, aber eine Möglichkeit, zusätzliche Programme hinzuzufügen, habe ich leider auch nicht gefunden... - Daraus habe ich dann den Schluß gezogen, daß es das beste ist, auf die Verwendung des KDE-Aufsatzes für lirc zu verzichten und sich direkt mit der lircrc zu beschäftigen.

Allerdings bin ich auch damit bisher nicht so richtig glücklich geworden. Wenn man wahlweise mehrere Programme mit der Fernbedienung steuern möchte, dann muß man ja Tasten definieren, die den Modus entsprechend umschalten. Und sich die Zuordnung der Tasten zu den verschiedenen Applikationen zu merken, fand ich irgendwie auch nicht so richtig komfortabel.

Was ich daher jetzt gemacht habe, ist folgendes: Ich habe mir ein kleines Perl-Skript geschrieben, welches mit kdialog eine Liste von Programmen zur Auswahl anzeigt. Aus dieser Liste kann man dann entweder per FB oder per Maus/Tastatur die entsprechende Anwendung auswählen. Daraufhin werden irexec und irxevent einfach gekillt und mit speziellen Config-Dateien für die gewählte Anwedung neu gestartet. Dazu wird dann noch das betreffende Programm selbst aufgerufen.

Das ist zwar einerseits eine Art "Holzhammer-Methode", andererseits aber (aus Nutzersicht) die bequemste Lösung, die mir bisher eingefallen ist. Sollte jemand andere interessante Vorschläge oder auch fertige Lösungen zum komfortablen Switching zwischen mehreren Anwendungen haben, so wäre ich sehr neugierig, diese kennenzulernen.

Viele Grüße,
gameboy.
 
Hi,

die Idee finde ich net schlecht...
...hast du das auch mit einer zentralen conf Datei gemacht (so wie lirc) oder konntest du dabei die /etc/lirc.conf nutzen?

Wäre wirklich super, wenn du die files mal posten könntest!

Niko
 
Hallo Niko_K,

gern kann ich die betreffenden Files hier zur Verfügung stellen. Da ich derzeit an meinem Linux-Rechner die Hardware umbaue (und der Rechner dementsprechend ausgeschaltet ist :)), habe ich momentan allerdings keinen Zugriff auf die Dateien. Bis zum Wochenende sollte das ganze eigentlich abgeschlossen sein und dann werde ich nähere Infos zu meinem Lösungsansatz hier reinstellen.

Viele Grüße,
gameboy.
 
Hi again,

hier kommen nun die versprochenen Files... - Allerdings nicht ohne eine kurze Vorrede. Zum einen möchte ich erwähnen, daß ich bei weitem kein Perl-Guru bin. Zum anderen ist es mir wichtig, zu betonen, daß es sich bei dem von mir verwendeten Ansatz keinesfalls um eine fertige oder erprobte Lösung, sondern um einen Prototyp handelt, d.h. das ganze befindet sich noch im Experimentierstadium.

Meine Grundidee ist die, daß es jederzeit möglich sein soll, über eine bestimmte Taste auf der Fernbedienung ("app") ein Menü aufzurufen, das die zur Fernsteuerung verfügbaren Applikationen auflistet. Aus dieser Liste möchte ich dann entweder per Tastatur/Maus oder per Fernbedienung die Applikation wählen können, für die die FB eingestellt werden soll. Im Standard-Modus muß die Fernbedienung dementsprechend nur auf wenige Tasten reagieren:

- app: Menü aufrufen
- hoch/runter: in der Liste aufwärts/abwärts navigieren
- select: Dialog mit OK bestätigen
- power: Dialog abbrechen

Dementsprechend sieht meine ~/.lircrc wie folgt aus:

Code:
############################################################################

begin
  prog   = irexec
  button = app
  config = "/home/td/bin/remote_control_menu"
end

############################################################################

# --- cursor up
begin 
  prog = irxevent
  button = up
  config = Key Up CurrentWindow
end
# --- cursor down
begin 
  prog = irxevent
  button = down
  config = Key Down CurrentWindow
end
# --- OK (select current entry and close dialog)
begin 
  prog = irxevent
  button = select
  config = Key alt-o CurrentWindow
end
# --- Cancel (cancel selection and close dialog)
begin 
  prog = irxevent
  button = power
  config = Key alt-b CurrentWindow
end

############################################################################
Das Perl-Skript enthält im Array @applications die Informationen für die einzelnen Programme, die über die FB gesteuert werden können. Zu jeden Programm gehören dabei folgende Informationen:

- Titel des Programms (nur zur Anzeige in der Auswahlliste/kdialog)
- Kommando, über welches das Programm gestartet wird
- Pfad der zu verwendenden .lircrc-Datei

Wenn der Benutzer einen Eintrag aus der Liste ausgewählt hat, werden die Prozesse irexec und irxevent beendet und mit den entsprechenden FB-Config-Files (also praktisch der zu verwendenden .lircrc) neu gestartet. Abschließend wird dann die ausgewählte Anwendung aufgerufen...

Code:
#!/usr/bin/perl

my @applications; # list of applications
my @app_cmds;
my @app_cfgs;

my $appentry;
my $num_apps = 0;
my $app_name;
my $app_cmd;
my $app_cfg;
my $kdialog_cmd;
my $on_off; # state for kdialog
my $output;
my $selected_app;
my $kill_cmd = "killall irxevent irexec";
my $start_irexec   = "/usr/bin/irexec ";
my $start_irxevent = "/usr/bin/irxevent ";
my $menu_cfg = "/home/td/.lircrc";

# format : push @applications, "<title>; <app-command>; <cfg-file>";
push @applications, "TVtime Television Viewer;    /usr/bin/tvtime;      /home/td/lircrc-files/tvtime";
push @applications, "VideoLAN Media Player (VLC); /usr/bin/vlc;         /home/td/lircrc-files/vlc";
push @applications, "MPlayer;                     /usr/bin/mplayer;     /home/td/lircrc-files/gmplayer";
push @applications, "Amarok MP3-Player;           /opt/kde3/bin/amarok; /home/td/lircrc-files/amarok";

# -------------------------------------------------------------------------------------------------------------------

system($kill_cmd);
system($start_irexec   . $menu_cfg . " &");
system($start_irxevent . $menu_cfg . " &");

$kdialog_cmd = "kdialog --radiolist \"Per Fernbedienung zu steuerende Applikation wählen:\" ";

foreach $appentry (@applications)
{
  $num_apps++;
  if ($num_apps == 1) { $on_off = "on"; } else { $on_off = "off"; }
  ($app_name, $app_cmd, $app_cfg) = split(/;/, $appentry);
  $app_name =~ s/^ *(.*?) *$/$1/;
  $app_cmd  =~ s/^ *(.*?) *$/$1/;
  $app_cfg  =~ s/^ *(.*?) *$/$1/;
  push @app_cmds,  $app_cmd;
  push @app_cfgs,  $app_cfg;
  $kdialog_cmd .= "$num_apps \"$app_name\" $on_off ";
}

open CALL_KDIALOG, "$kdialog_cmd |";
$output = join("", <CALL_KDIALOG>); 
close CALL_KDIALOG;
$selected_app = $output;
$selected_app =~ s/^\s*(\d+)\s*$/$1/;
if ( ($selected_app < 1) || ($selected_app > $num_apps) ) { die "Keine Applikation ausgewählt! (Dialog-Abbruch?)"; }

system($kill_cmd);
system($start_irexec   . $app_cfgs[$selected_app-1] . " &");
system($start_irxevent . $app_cfgs[$selected_app-1] . " &");
system($app_cmds[$selected_app-1] . " &");
In den einzelnen Config-Files für die Applikationen (tvtime, vlc, etc.) ist jeweils für die app-Taste wieder das gleiche definiert, wie in meiner ~/.lircrc. Dies stellt sicher, daß jederzeit wieder das Menü aufgerufen werden kann, unabhängig davon, welche Config-Datei gerade aktiv ist. Die Config-Datei für tvtime hat z.B. folgenden Anfang:

Code:
############################################################################

begin
  prog   = irexec
  button = app
  config = "/home/td/bin/remote_control_menu"
end

############################################################################

begin
    prog = irexec
    button = power
    config = tvtime-command QUIT
end
begin
    prog = irexec
    button = zoom
    config = tvtime-command TOGGLE_FULLSCREEN
end

[ ... ]
Bedingt durch einen Hardware-Umbau in Verbindung mit einer Neuinstallation meines Systems (SUSE 10.0 anstelle von SUSE 9.3), der sich aufgrund von Hardware-Problemen momentan etwas hinzieht, habe ich derzeit leider keine Möglichkeit, das ganze nochmal auszuprobieren. Ich hoffe, daß aus den Erläuterungen sowie aus den Quelltexten selbst das Prinzip deutlich geworden ist, so daß jeder, den es interessiert, das ganze selbst mal testen kann.

Anregungen und Verbesserungsvorschläge zur oben skizzierten Vorgehensweise sind selbstverständlich jederzeit willkommen. Wenn ich in absehbarer Zeit wieder ein vollständiges System am Laufen habe, werde ich auch selbst auch wieder ein bißchen rumbasteln...

Viele Grüße,
gameboy.
 
Oben