All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

rdp-mime.pl 2.64 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#!/usr/bin/perl -w
#
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2003 University of Utah and the Flux Group.
# All rights reserved.
#
use English;
use Getopt::Std;

#
# This is a helper program for your web browser. It allows you to rdp
# to an experimental node by clicking on a menu option in the shownode
# page. Its extremely helpful with jailed nodes, where sshd is either
# running on another port, or on a private IP. Please see the Emulab FAQ
# for instructions on how to install this helper program. 
#
# Obviously, it helps to have an ssh agent running.
# 
sub usage()
{
    print(STDERR "rdp-mime.pl <control-file>\n");
}
my $optlist = "";
my $config;

# Locals
my $hostname;
my $gateway;
my $port    = "";
my $login   = "";
31
my $pswd    = "";
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

#
# Turn off line buffering on output
#
$| = 1;

#
# Parse command arguments. Once we return from getopts, all that should be
# left are the required arguments.
#
%options = ();
if (! getopts($optlist, \%options)) {
    usage();
}
if (@ARGV != 1) {
    usage();
}
$config = $ARGV[0];

#
# Open up the config file. It tells us what to do.
#
open(CONFIG, "< $config")
    or die("Could not open config file $config: $!\n");

while (<CONFIG>) {
    chomp();
    SWITCH1: {
	/^port:\s*(\d+)$/ && do {
	    $port = "-p $1";
	    last SWITCH1;
	};
	/^hostname:\s*([-\w\.]+)$/ && do {
	    $hostname = $1;
	    last SWITCH1;
	};
	/^gateway:\s*([-\w\.]+)$/ && do {
	    $gateway = $1;
	    last SWITCH1;
	};
	/^login:\s*([-\w]+)$/ && do {
	    $login = "-u $1";
	    last SWITCH1;
	};
76 77 78 79
	/^password:\s*(.+)$/ && do {
	    $pswd = "-p '$1'";
	    last SWITCH1;
	};
80 81 82 83 84 85 86 87 88 89 90 91
    }
}
close(CONFIG);

#
# Must have a hostip. Port is optional.
#
if (!defined($hostname)) {
    die("Config file must specify a hostname\n");
}

# Run rdesktop in its own directory so it finds the keymaps subdirectory.
92 93 94 95 96 97 98 99
#
# You can specify any display resolution you want; it doesn't have to be
# one of the "normal" ones.  And you can switch back and forth by just starting
# a new rdesktop and "grabbing" the rlogin session away from the previous one.
# 
# But once an rdesktop is started up, its display resolution is fixed.  If you make it
# smaller than the previous one, it will push your windows around to fit.
#
100 101 102 103 104 105 106 107 108 109 110 111
my $rdir = "/usr/local/share/rdesktop";
my $rdcmd = "rdesktop";
if (! -d $rdir) {
    $rdir = "~fish/misc/rdesktop/rdesktop-1.3.1";
    my $rdcmd = "cd $rdir; ./rdesktop";
}
die("rdp-mime.pl: No rdesktop directory found.\n")
    if (! -d $rdir);

# Customize -g resolution and -a colordepth to taste.
my $rdargs = "-K -g 1280x1024 -a 16";

112
if (!defined($gateway)) {
113
    exec "$rdcmd $rdargs $login $pswd $hostname &";
114 115
}
else {
116
    die("rdp-mime.pl: No proxying yet.\n");
117
}