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
31
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
76
77
78
79
#!/usr/bin/perl -w
=head1 NAME
tmux-server-backend - TODO
=head1 SYNOPSIS
tmux-server-backend [options]
--help
--name <socket name>
=head1 DESCRIPTION
TODO
=cut
use strict;
use Getopt::Long ();
Getopt::Long::GetOptions(
help => \&pod2usage,
debug => \ my $debug,
name => \ my $socket_name,
'daemonize!' => \ my $daemonize,
)
or pod2usage();
if ( $daemonize ) {
fork && exit;
fork && exit;
umask 0;
chdir '/';
}
require File::Temp;
my ( $log_fh, $log_fn ) = File::Temp::tempfile();
my @cmd = ( 'tmux', 'new-window', "tty > $log_fn; sleep 10000000" );
if ( $debug ) {
print STDERR "system( @cmd )\n";
}
system @cmd;
if ( $? ) {
die "system( @cmd ) returned \$?=$?";
}
require Time::HiRes;
Time::HiRes::sleep( 0.05 )
until -s $log_fh;
my $tty = <$log_fh>;
chomp $tty;
@cmd = ( 'socat', '0', "FILE:$tty" );
if ( $debug ) {
print STDERR "system( @cmd )\n";
}
system @cmd;
if ( $? ) {
die "system( @cmd ) returned \$?=$?";
}
$^W = 0;
open my $tty_fh, '>', $tty;
syswrite $tty_fh, "Socket closed\n";
close $tty_fh;
kill -2, 0; # SIGINT
kill -15, 0; # SIGTERM
kill -9, 0; # SIGKILL
sub pod2usage {
require Pod::Usage;
goto &Pod::Usage::pod2usage;
}