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