PAC Manager y XFreeRDP

Resuta que el fantástico gestor de conexiones PAC (pacmanager), escrito en perl, está abandonado.
Funciona perfectamente bien PEEEEEERO resulta que xfreerdp han cambiado los formatos de los parámetros por lo que PAC ejecuta "mal" xfreerdp.

He buscado alternativas pero ninguna me ha funcionado (ni el Remmina en fedora kde) así que como PAC está implementado con PERL he mirado de intentar cambiar como PAC envía los parámetros a xfreerdp.

Buscando por internet, encontramos las primeras pistas:
  • /usr/share/pacmanager/lib
Allí hay el fichero que nos interesa: pac_conn. Dentro del directorio "methods" hay un PACMethod_xfreerdp.pm que en principio debería ser el que contruye el string de parámetros que se mandan a xfreerdp, sin embargo, tras modificarlo mi sorpresa ha sido que igualmente los parámetros se seguían contruyendo mal... (porquéeee!!!).

Así pues he optado por modificar el pac_conn directamente para "reconstruir" los parámetros que me interesa:
  • -a #bps -> /bpp:#
  • -d dominio -> /d:dominio
  • elimino los espacios despues de ':'
##############################################
# TERMINAL DESKTOP METHODS (rdp, vnc, etc)
##############################################
elsif   ( $METHOD =~ /^.*RDP \((.+)\).*$/ ) {
   $METHOD = $1;
   if ( ( defined $$CFG{'tmp'}{'xid'} ) && ( $METHOD eq 'rdesktop' ) ) {
      $connection_cmd = "$METHOD -X $$CFG{'tmp'}{'xid'} -g $$CFG{'tmp'}{'width'}x$$CFG{'tmp'}{'height'} $CONNECT_OPTS"
                        . ( $MANUAL ? '' : " -u $USER -p -" ) . " $IP:$PORT";
      $connection_txt = "$METHOD -X $$CFG{'tmp'}{'xid'} -g $$CFG{'tmp'}{'width'}x$$CFG{'tmp'}{'height'} $CONNECT_OPTS" 
                        . ( $MANUAL ? '' : " -u $USER -p -" ) . " $IP:$PORT";
   } elsif ( defined $$CFG{'tmp'}{'xid'} ) {
    #
    # Modification of $CONNECT_OPTS to acomodate to xfreerdp (why don't use PACMethod_xfreerdp????)
    #
    my $options = $CONNECT_OPTS;
    $options =~ s/-a/\/bpp:/;
    $options =~ s/-d/\/d:/;
    $options =~ s/\:\ /\:/g;

    $connection_cmd = "$METHOD /size:$$CFG{'tmp'}{'width'}x$$CFG{'tmp'}{'height'} $options" . 
                      ( $MANUAL ? '' : " /u:$USER /p:$PASS" ) . " /v:$IP:$PORT";
    $connection_txt = "$METHOD /size:$$CFG{'tmp'}{'width'}x$$CFG{'tmp'}{'height'} $options" . 
                      ( $MANUAL ? '' : " /u:$USER /p:$PASS" ) . " /v:$IP:$PORT";

    #open (FILE,">> /tmp/pac.log");
    #print FILE "-- options: $options\n";
    #print FILE "-- run: $connection_cmd\n\n";
    #close (FILE);

  } elsif ( $METHOD eq 'rdesktop' ) {
    $connection_cmd = "$METHOD $CONNECT_OPTS" . ( $MANUAL ? '' : " -u $USER -p -" ) . " -T \"$TITLE\" $IP:$PORT";
    $connection_txt = "$METHOD $CONNECT_OPTS" . ( $MANUAL ? '' : " -u $USER -p -" ) . " -T \"$TITLE\" $IP:$PORT";
  } else {
    $connection_cmd = "$METHOD $CONNECT_OPTS" . ( $MANUAL ? '' : " /u:$USER" ) . " /v:$IP:$PORT /t:\"$TITLE\"";
    $connection_txt = "$METHOD $CONNECT_OPTS" . ( $MANUAL ? '' : " /u:$USER" ) . " /v:$IP:$PORT /t:\"$TITLE\"";
}

Comentarios