Question

I recently understood that if I write characters inside /dev/tty it will simulate key presses with a keyboard.

I was wondering if I can simulate holding a key or a key combination.

What I'm looking for is to simulate the Alt + Tab to switch between open applications. I'm not looking for alternatives. I am practising to learn how can I simulate a physical key press on a keyboard. Is it possible to simulate key combinations (like Alt + Tab)?

Also, how can I press the Enter key?

It seems it's not '\n' or '\r' or "\r\n" or "\n\r". The reason I'm looking for the Enter key is that I want do a "sudo" command in the terminal and when it prompts for a password, I use the /dev/tty to answer that, but it seems standard input or standard output (using "-S" option with sudo) don't work.

Is there anything I'm doing wrong? Are there some libraries I should be looking for (like Expect)? Or is what I'm trying to do impossible?

I am using C++. All I want to do is to try to simulate a physical key press on my keyboard. The OS is Ubuntu 13.04 (Raring Ringtail). (Just as a practise)

But I have two goals:

  1. To create a program which switches between applications using Alt + Tab.
  2. interact with a Linux terminal.

I've found two solutions:

  1. Write characters/codeASCII s of the corresponding keys to /dev/tty
  2. Write characters/codeASCII s of the corresponding keys to standard output and/or standard input

But none of them worked. Is what I'm doing correct or not?

Was it helpful?

Solution

X does not read keystrokes from /dev/tty. If you want to simulate keystrokes in X, you’ll need to send them another way. If you’re writing a shell script, xdotool is your friend; if you’re writing C, though, you’ll probably want to use libxdo, the library underlying xdotool. If you’re looking for something a bit more low-level, you might be interested in the XCB Test API, on which both xdotool and libxdo rely.

Unless you can provide more information about your experience with sudo, I don’t think anybody will be able to answer your second question. sudo -S is definitely the intended mechanism for programmatically providing a password to sudo.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top