Files
mattf f7256f83ed fixed multi-server remote agent issue
added agent screen resolution change utility for ubuntu

git-svn-id: svn://192.168.202.10@1438 3d104415-ff17-0410-8863-d5cf3c621b8a
2010-05-24 20:00:00 +00:00

155 lines
3.3 KiB
Perl

#!/usr/bin/perl
#
# res.pl - script to gather resolution and set to consistent resolution
#
# CHANGES:
# 20100518-1326 - first build
#
$build = '20100518-1326';
### begin parsing run-time options ###
if (length($ARGV[0])>1)
{
$i=0;
while ($#ARGV >= $i)
{
$args = "$args $ARGV[$i]";
$i++;
}
if ($args =~ /--help/i)
{
print "res.pl - forces resoution change\n";
print "allowed run time options:\n";
print " [-t] = test, don't change anything\n";
print " [-debug] = lots of debug output\n";
print " [-debugX] = even more debug output\n";
print " [-change-only] = do not add new resolution mode\n";
print " [-800x600] = find 800 by 600 resolution monitor specifics and set resolutions to it\n";
print " [-1024x768] = find 1024 by 768 resolution monitor specifics and set resolutions to it\n";
print " [-help] = this help message\n";
print "\n";
exit;
}
else
{
if ($args =~ /-change-only/i)
{
$change_only = 1;
}
if ($args =~ /-debug/i)
{$DB=1;}
if ($args =~ /--debugX/i)
{
$DB=1;
$DBX=1;
print "\n----- SUPER-DUPER DEBUGGING -----\nBUILD: $build\n";
}
if ($args =~ /-1024x768/i)
{
$cvt_options = '1024 768';
$xrandr_options = '1024x768';
}
if ( ($args =~ /-800x600/i) || (length($cvt_options) < 1) )
{
$cvt_options = '800 600';
$xrandr_options = '800x600';
}
if ($args =~ /-t/i)
{
$TEST=1;
$T=1;
}
}
}
else
{
$cvt_options = '800 600';
$xrandr_options = '800x600';
}
### end parsing run-time options ###
### find cvt binary "cvt 800 600"
$cvtbin = '';
if ( -e ('/bin/cvt')) {$cvtbin = '/bin/cvt';}
else
{
if ( -e ('/usr/bin/cvt')) {$cvtbin = '/usr/bin/cvt';}
else
{
if ( -e ('/usr/local/bin/cvt')) {$cvtbin = '/usr/local/bin/cvt';}
else
{
print "Can't find cvt binary! Exiting...\n";
exit;
}
}
}
### find xrandr binary
$xrandrbin = '';
if ( -e ('/bin/xrandr')) {$xrandrbin = '/bin/xrandr';}
else
{
if ( -e ('/usr/bin/xrandr')) {$xrandrbin = '/usr/bin/xrandr';}
else
{
if ( -e ('/usr/local/bin/xrandr')) {$xrandrbin = '/usr/local/bin/xrandr';}
else
{
print "Can't find xrandr binary! Exiting...\n";
exit;
}
}
}
if ($change_only < 1)
{
if ($DBX > 0) {print "CVT COMMAND: |$cvtbin $cvt_options|\n";}
@cvtOUTPUT = `$cvtbin $cvt_options`;
## 800x600 59.86 Hz (CVT 0.48M3) hsync: 37.35 kHz; pclk: 38.25 MHz
#Modeline "800x600_60.00" 38.25 800 832 912 1024 600 603 607 624 -hsync +vsync
$Modeline_found=0;
$ct=0;
while( ($Modeline_found < 1) && ($ct < 10) )
{
if ($cvtOUTPUT[$ct] =~ /Modeline/)
{
$Modeline_found++;
chomp($cvtOUTPUT[$ct]);
$modline = $cvtOUTPUT[$ct];
$modline =~ s/Modeline //gi;
if ($DBX > 0) {print "MODLINE: $ct|$modline|\n";}
}
$ct++;
}
if ($DBX > 0) {print "XRANDR COMMAND: |$xrandrbin --newmode $modline|\n";}
@xrandrOUTPUT = `$xrandrbin --newmode $modline`;
$ct=0;
foreach(@xrandrOUTPUT)
{
$modline = chomp($xrandrOUTPUT[$ct]);
if ($DBX > 0) {print "XRANDR OUTPUT: $ct|$xrandrOUTPUT[$ct]|\n";}
$ct++;
}
}
if ($DBX > 0) {print "CHANGING RESOLUTION: |$xrandrbin --size $xrandr_options|\n";}
@xrandr_sizeOUTPUT = `$xrandrbin --size $xrandr_options`;
if ($DBX > 0) {print "DONE, EXITING...\n";}
exit;