From 61470b08d1a7726edc88df802155946edf404acc Mon Sep 17 00:00:00 2001 From: root Date: Sat, 16 Sep 2023 12:38:19 -0600 Subject: [PATCH] wrvtcmd --- write command to virtual terminal --- wrvtcmd | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 wrvtcmd diff --git a/wrvtcmd b/wrvtcmd new file mode 100755 index 0000000..dafac52 --- /dev/null +++ b/wrvtcmd @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +""" +wrvtcmd --- write command to virtual terminal. +""" + +# MIT License +# +# Copyright (c) 2023 Jeff Moe +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import fcntl +import sys +import termios +import argparse + + +def main(): + parser = argparse.ArgumentParser(description="write command to virtual terminal") + parser.add_argument( + "-c", + "--cmd", + help="command to run (default echo)", + type=str, + required=False, + default="echo", + ) + parser.add_argument( + "-t", + "--tty", + help="TTY to use (default /dev/tty1)", + type=str, + required=False, + default="/dev/tty1", + ) + args = parser.parse_args() + CMD = args.cmd + TTY = args.tty + + with open(TTY, "w") as fd: + for char in CMD: + print(char, end="") + fcntl.ioctl(fd, termios.TIOCSTI, char) + fcntl.ioctl(fd, termios.TIOCSTI, "\n") + print() + + +if __name__ == "__main__": + main()