#!/usr/bin/perl

use strict;

my $SU = '/bin/su';
my $WHO = '/usr/bin/who';
my $XRANDR = '/usr/bin/xrandr -d :0';

my($consoleuser, $sudcmd) = ();
open(WHO, "$WHO |") || die "'who' command failed: $@\n";
while (<WHO>) {
  if (/\(:0\W/) {
    ($consoleuser) = (split(/\s+/))[0];
    last;
  }
}
close(WHO);
die "Unable to determine who's on the console" unless (length($consoleuser));

my $cmd = "$XRANDR -q";
$cmd = "$SU $consoleuser -c '$cmd'" if ($consoleuser ne 'root');
open(QRY, "$cmd |") || die "'xrandr -q' failed: $@\n";

my($curr, %status) = ();
while (<QRY>) {
  if (/ connected /) {
    $curr = (split(' '))[0];
  }
  elsif (/\*/) {
    $status{$curr} = (split(' '))[0];
  }
}
close(QRY);

$cmd = "$XRANDR --output LVDS --auto --output VGA --off"; #failsafe
if ($status{'VGA'} && $status{'LVDS'}) {
  $cmd = "$XRANDR --output LVDS -auto --output VGA --off";
}
elsif ($status{'LVDS'}) {
  $cmd = "$XRANDR --output LVDS --off --output VGA --auto";
}
elsif ($status{'VGA'}) {
  43 $cmd = "$XRANDR --output LVDS --auto --output VGA --mode 1024x768 --same-as LVDS";
}
$cmd = "$SU $consoleuser -c '$cmd'" if ($consoleuser ne 'root');

system($cmd);