pty

changing pseudo tty echo mode from the master side

On linux, I am opening a pseudo tty on the master side. While there is no client on the slave side, the pseudo tty seems to be echoing everything I am writing to him, which is not what I am expecting. Consider the folowing code : int main(int argc, char * argv[]) { int ptyfd; int rc; /* return code */ char readbuf[3]; ...

Ruby - Problems with Expect and Pty

I'm trying to write a Ruby script that will ssh over to a server, run a given command, and fetch the output from it. Here's what I've got so far, mostly adapted from the Programming Ruby book: require 'pty' require 'expect' $expect_verbose = true PTY.spawn("ssh [email protected]") do |reader, writer, pid| reader.expect(/[email protected]'s password:.*...

Python os.forkpty why can't I make it work

import pty import os import sys import time pid, fd = os.forkpty() if pid == 0: # Slave os.execlp("su","su","MYUSERNAME","-c","id") # Master print os.read(fd, 1000) os.write(fd,"MYPASSWORD\n") time.sleep(1) print os.read(fd, 1000) os.waitpid(pid,0) print "Why have I not seen any output from id?" ...

How does xterm's -S option (pass pseudo terminal name and descriptor) work in Linux ?

Greetings, while porting old Solaris 2.4 code to CentOS 5.3 I came across an invocation like /usr/bin/xterm -S%s%d ... where %s is a two-character digit sequence XX like 00, 01 and %d is a numeric file descriptor. This was apparently a way to tell xterm to use /dev/ttypXX (a pseudo terminal slave) but the code does not seem to bother ...

How to capture unbuffered output from stdout without modifying the program?

I'm writing a utility for running programs, and I need to capture unbuffered stdout and stderr from the programs. I need to: Capture stdout and stderr to separate files. Output needs to not be buffered (or be line buffered). Without modifying the source of the program being run. The problem is, when piping output to a file, the stdou...

arrow key via stdin

Hi everybody, I'm trying to send an arrow key via the stdin to the bash: cat | /bin/bash then i am typing "echo hi" => "hi" appears on the console (of course without the quotes) then i press the arrow key up => ^[[A command not found appears Is it possible to send an arrow key to an program via the stdin ? The reason why i am asking...

Python: when to use pty.fork() versus os.fork()

I'm uncertain whether to use pty.fork() or os.fork() when spawning external background processes from my app. (Such as chess engines) I want the spawned processes to die if the parent is killed, as with spawning apps in a terminal. What are the ups and downs between the two forks? ...

interact (stdin/out) with command line programs at runtime in C

I think the thing I want to do is called GUI/command line wrapping sftp(1). I need an easy way to start that program and react on its output while running. Additionally I have to be able to send input to it, full interaction is required. I tried forkpty (emulated TTY), but there wasn't one good example findable using forkpty for that jo...

Simplest way to get a PTY in Linux C++

Hello, all. I am programming something that needs an interface to Bash. At first I thought I could just use popen or QProcess. ( I'm using QT C++ ) They work fine but I can't get them to run Bash in a tty, which you need if you are going to use anything like sudo, which requires a tty/pty to accept a password. I found some things like ...

X throws out errors when forkpty is called. (C++)

Hello, all. When my program gets to this line,: pid_t nPid = forkpty( &m_nMasterFD, NULL, NULL, NULL ); it outputs this: X Error: BadIDChoice (invalid resource ID chosen for this connection) 14 Extension: 148 (RENDER) Minor opcode: 17 (RenderCreateGlyphSet) Resource id: 0x3600002 <unknown>: Fatal IO error 4 (Interrupted sys...

Read() from file descriptor hangs

Hey, hopefully this should be my last PTY-related question and I can move onto more exciting issues. (c; Here's a set of small functions I have written for creating and reading/writing to a pty: http://pastebin.com/m4fcee34d The only problem is that they don't work! After I run the initializer and writeToPty( "ls -l" ) , 'output' from...

Child process unable to read from created pseudo terminal

I'm trying to write an app that can login to SSH with a password, by using pseudo terminals. But if I write() to the master device then the data somehow does not appear in the slave device. Here's a simple test case: #include <sys/wait.h> #include <sys/types.h> #include <stdio.h> #include <unistd.h> #ifdef __linux__ #include <pty.h>...

Software serial port loopback on linux

Hello, all. Currently I need to develop some program that will communicate with cisco devices over serial line. I want to build testing environment on my development linux machine. So, I found dynamips cisco emulator. This emulator can provide interface via serial line with '-U /dev/ttyS0' option. Well, this causes dynamips to open hard...

How to send Ctrl-C control character or terminal hangup message to child process?

I have a child process which runs in a pseudo terminal. The parent process does not run as root, but the child process does, through su or sudo. Because of this it is not possible to send a signal to the child process to force it to exit. I want to force it to exit by one of these means: emulating a Ctrl-C. emulating a terminal hangup....

forkpty - socket

Hi, I'm trying to develop a simple "telnet/server" daemon which have to run a program on a new socket connection. This part working fine. But I have to associate my new process to a pty, because this process have some terminal capabilities (like a readline). The code I've developped is (where socketfd is the new socket file descriptor...

How do you kill a PTY.spawn call in Ruby?

If I run a command like this, using ruby's pty class, how do I kill it if I find a certain input string? cmd = "appcfg.py update cdn" PTY.spawn("#{cmd} 2>&1") do | input, output, pid | begin input.expect("Email:") do output.write("#{credentials[:username]}\n") end input.expect("Password:") do output.write("#{cr...

How communicate with pty via minicom or screen?

I am trying to provide an AT/Modem-like interface around some hardware. Follwing this post I have the server setting up a pty using openpty(). Now I can communicate with the server as expected with a client app that open the slave and communicates via read() and write() calls. However I would also like to be able to use either the scre...

Reading from a pty

I'd like to receive (and later process) write(1) and wall(1) messages using a (Unix 98-style) pseudo tty on Linux. I already have the following minimal implementation: #include <stdlib.h> #include <string.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <signal.h> #include <utempter.h> #define BU...

How can I detect when someone opens the slave side of a pty (pseudo-terminal) in Linux?

Having more than one process read from a serial device (/dev/ttyXX) makes it so that both processes can't get all of the data -- the data will be split between them in some way. I'd like to write a program that reads from a serial device, creates several master/slave pty pairs, and then allows programs that were made to read from the se...

Why is ruby's PTY library failing to capture input when the shell has subprocesses?

I am writing a terminal emulator in ruby using the PTY library. /dev/tty0 is a device file connected to a keyboard. I am spawning the shell like this: shell = PTY.spawn 'env TERM=ansi COLUMNS=63 LINES=21 sh -i < /dev/tty0' It mostly works, but when a subprocess is started in the shell, shell[0] is not outputting the keyboard input to ...