NAME
Term::TtyWrite - remote control a terminal via the TIOCSTI ioctl
SYNOPSIS
As root.
use Term::TtyWrite;
my $tty = Term::TtyWrite->new("/dev/ttyp1"); # or whatever
$tty->write("echo hi\n");
$tty->write_delay("echo hi\n", 250);
DESCRIPTION
Remote control a terminal via the TIOCSTI
ioctl(2). This typically requires that the code be run as root, or on Linux that the appropriate capability has been granted.
This module will throw an exception if anything goes awry; use eval
or Syntax::Keyword::Try to catch these, if necessary.
METHODS
- new device-path
-
Constructor; returns an object that the write method may be used on. The new method requires that a path to a device be supplied. These will vary by operating system, and can be listed for a given terminal with the tty(1) command.
- write string
-
Writes the given string to the terminal device specified in the constructor new.
- write_delay string, delayms
-
As write but with a delay of the given number of milliseconds after each character written. The maximum delay possible is around 4294 seconds on account of the usleep(3) call being limited to
UINT_MAX
; more control is possible by instead wrapping appropriate sleep code around single-character calls to write:for my $c (split //, $input_string) { custom_sleep(); $tty->write($c); }
BUGS
Reporting Bugs
Please report any bugs or feature requests to bug-term-ttywrite at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Term-TtyWrite.
Patches might best be applied towards:
https://github.com/thrig/Term-TtyWrite
Known Issues
Untested portability given the use of particular ioctl()s that perlport warns about. The security concerns of running as root. Lack of tests on account of being tricky to test what with the needing root and injecting characters into the terminal thing.
OpenBSD has removed the TIOCSTI ioctl due to security concerns; this module will only work on older releases of OpenBSD.
SEE ALSO
An implementation in C:
https://github.com/thrig/scripts/blob/master/tty/ttywrite.c
uinput
on Linux can fake keyboard input.
If possible, instead wrap the terminal with Expect and control it with that.
AUTHOR
thrig - Jeremy Mates (cpan:JMATES) <jmates at cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2016,2018 by Jeremy Mates
This program is distributed under the (Revised) BSD License: http://www.opensource.org/licenses/BSD-3-Clause