--- lib/PXElator/x11.pm 2009/08/06 22:15:09 171 +++ lib/PXElator/x11.pm 2009/08/12 01:29:11 202 @@ -3,6 +3,9 @@ use warnings; use strict; +use log; +use File::Slurp; + my @cols; my $last_col = ''; @@ -19,8 +22,39 @@ sub xterm { my ( $name, $cmd ) = @_; - my $fg = $cols[ unpack('C*', $name) % $#cols ]; - my $exec = "xterm -fg $fg -T '$name' -n '$name' -e '$cmd || $server::base_dir/bin/beep.sh'"; + my $screenrc = "/tmp/$name.screenrc"; + + my ($autodetach,$detach) = $ENV{DISPLAY} ? ('off','') : ( 'on', 'detach' ); + + write_file $screenrc, qq| + +autodetach $autodetach +altscreen off +defscrollback 10000 +startup_message off + +sessionname $name + +screen -t $name $cmd +logfile $log::dir/$name.log +log on + +$detach + +|; + + my $screen = "screen -R $name -c $screenrc"; + my $exec; + + if ( $ENV{DISPLAY} ) { + my $fg = $cols[ unpack('C*', $name) % $#cols ]; + $exec = "xterm -fg $fg -T '$name' -n '$name' -e '$screen'"; + } else { + warn "system $screen"; + system $screen; + return; + } + warn "exec $exec"; exec $exec; }