How to paste commands into a TTY?

11,416

Solution 1

It's simple, but you need an additional tool.

  1. Install the package xsel which provides an easy command to access the clipboard:

    sudo apt-get install xsel
    
  2. Find out which $DISPLAY your desktop is using. Usually it should be :0, but you can check it by running this command in a terminal emulator on your GUI desktop:

    echo $DISPLAY
    

    I will assume the output is :0, replace that with your actual output in the following commands if it's different.

  3. Copy the command you would like to execute in the TTY, e.g. using Ctrl+C.

  4. Switch to the TTY you want to use, e.g. to TTY1 using Ctrl+Alt+F1.
    Log in by typing your username and password.

  5. Enter the full command you wish to run, but replace the part you want to insert from the clipboard with $(DISPLAY=:0 xsel -ob).

    For example if you copied a large list of packages to install, you could type this into the TTY:

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    The clipboard snippet does not necessarily have to be at the end of your command though, it may appear anywhere.


To simplify things further, let's move this still a bit complicated DISPLAY=:0 xsel -ob to a script. I'll name it PASTE (because paste is already taken), but you can also call it differently.

To create the script file in a location where every user can run it without having to specify the full path (I recommend /usr/local/bin for this) and to make it executable, simply run those two commands:

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

Now you can simply embed $(PASTE) into your commands on a TTY to insert the clipboard content from your desktop there.

Solution 2

Personally, I just use text files:

  1. In your desktop environment, open a terminal and

    echo "whatever long text you have copied" > file
    
  2. Drop to the tty and

    $(cat file)
    

Solution 3

Another possible workaround not listed above involve the use of vim, pasting and running :!unix_command in command mode:

  1. copy the commands and the path to the clipboard
  2. open vim, go to command mode Esc, enter the prompt :
  3. type a bang ! and then paste Ctrl + Shift + V the command you previously copied in the prompt and execute

Solution 4

Another workaround with tmux that needs no configuration:

Launch tmux (Open terminal and type tmux) in the virtual "TTY" (Ctrl+Alt+F2 for Ubuntu) window and do your general work.

Whenever you need to paste something into that terminal session just open a regular desktop terminal (Ctrl+Alt+T) and enter tmux, then use keystrokes Ctrl+b , then w to list active sessions and find the one you wish to paste the content into. Once done, just close the terminal on your desktop and you may continue using "TTY" terminal as if you hadn't ever left it!

Share:
11,416

Related videos on Youtube

Admin
Author by

Admin

Updated on September 18, 2022

Comments

  • Admin
    Admin over 1 year

    I have some rather long commands and file paths which I have copied to clipboard and need to execute in a TTY, however the file paths are too long to retype and I would like to just paste them in after the $ (I can retype the commands before them then), is there a way to do this?

    So I would like to execute a command and have it on the next line starting with $ put the text copied to the clipboard like so:

    $ specialCommandToPasteText
    $ pastedText
    

    I am running Ubuntu GNOME 16.04 with GNOME 3.20.

  • Byte Commander
    Byte Commander almost 8 years
    You could even store DISPLAY=:0 xsel -ob as Bash alias or small script anywhere (let's name it PASTE) and only use a shortened form like $(PASTE) to use clipboard contents in your commands.
  • Terrance
    Terrance almost 8 years
    This is good to know. I actually didn't think that a simple command such as this would work so well. Sometimes the mind just thinks too complicated. Thank you! =)
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy almost 8 years
    Very nice approach
  • Peter Cordes
    Peter Cordes almost 8 years
    I just use some-command ' shift+insert (to paste). ' return. Pasting inside single or double quotes prevents newlines in the pasted text from running the command before I can edit it to fix up any problems. IDK what it gains you to put the text in a file. Bash has very powerful line-editing keystrokes, like ctrl-left or ctrl-right arrow to move by words. alt-backspace to delete backwards words. Alt-d to delete forward words, etc. etc.
  • terdon
    terdon almost 8 years
    @PeterCordes yeah but the term "tty" is often, if inaccurately, used to refer to virtual consoles.
  • OverClocked
    OverClocked about 4 years
    Thanks for editing @Kulfy! Looks like I thought it would when I originally wrote it haha!
  • Shayan
    Shayan about 2 years
    Does this work on Ctrl+Alt+F2 ? I get this error: xsel: Can't open display: (null)