added agent screen resolution change utility for ubuntu git-svn-id: svn://192.168.202.10@1438 3d104415-ff17-0410-8863-d5cf3c621b8a
155 lines
3.3 KiB
Perl
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;
|