如何在控制台和 X 会话之间复制/粘贴?

Che*_*tar 13 x11 tty clipboard console virtual-consoles

在非图形控制台 (<Ctrl><Alt><F...>) 和 X 会话之间复制/粘贴的最快方法是什么?

现在 :

  • 我用鼠标在控制台上选择文本(我已经安装了 gpm)
  • 然后我将文本粘贴到临时文件中
  • 最后我切换到 x 会话,打开临时文件,然后复制/粘贴其内容

有没有更简单的方法来做到这一点?非 X 控制台和 X 会话的主要选择是否可以合并?理想情况下,我想在控制台中选择文本,然后切换到 X 会话并粘贴它(单击鼠标中键)。这可以做到吗?

MC6*_*020 16

实现此类目标的“最佳”方法几乎可能是基于意见的。

我更喜欢的方式是使用本机终端的积压。

知道 tty[N] 的积压可以通过 /dev/vcs[N] 访问,我只需cat /dev/vcs[N]从我的 Xterm 中启动并根据显示的结果执行任何我想要的操作。

当然,如果您的 Xterm 用户与您要转储的 tty 的所有者不同,您可能需要使用 sudo。


顺便说一句,正如评论中明智地报告的那样,由于没有换行符,您可能会对格式感到恼火。man vcs将为您提供可能的解决方法:

Note that the output does not contain newline characters, so some
processing may be required, like in
 
fold -w 81 /dev/vcs3 | lpr
 
or (horrors)
 
setterm -dump 3 -file /proc/self/fd/1
Run Code Online (Sandbox Code Playgroud)

  • 将此解决方案标记为已接受。它是迄今为止使用速度最快的。我编写了一个执行格式化工作的脚本。该脚本的别名称为“catty”。命令 `catty 5` 打印出 tty5 的内容。使用起来非常快!再次感谢 (3认同)
  • @ChennyStar,如果您在控制台和终端窗口中通过“tput cols”找到相同的宽度,那么在查看待办事项时,格式会很好。(至少在我基于 Ubuntu 18.04.6 LTS 的系统中是这样。) (2认同)

小智 8

您可以做的另一件事是使用screen。它创建一个虚拟终端,可以从任何 tty/pty 分离并重新连接到另一个终端。

因此,对于您的用例,将在控制台上启动屏幕会话:

~ $ screen -L -S TestTerm
Run Code Online (Sandbox Code Playgroud)

并且,为了澄清,“ -L ”打开日志记录,这会在您启动屏幕的目录中创建一个日志文件,“ -S ”为屏幕会话提供一个名称,可以帮助您在列出所有屏幕时辨别哪个会话是哪个会话与“ -ls ”的会话。

现在,如果您必须从控制台运行该应用程序,请运行该应用程序,并在其运行时按“(Ctrl+A)+(Ctrl+D)”从屏幕会话中分离。然后进入桌面,打开终端并运行:

~ $ screen -ls
There is a screen on: 
    10296.TestTerm  (Detached)
1 Socket in /tmp/screen/S-ChennyStar.
Run Code Online (Sandbox Code Playgroud)

现在,您已经有了屏幕会话的 PID 和名称,因此将其重新附加到您的 xterm:

~ $ screen -d -r 10296.TestTerm
Run Code Online (Sandbox Code Playgroud)

并且,为了澄清,“ -d ”告诉screen分离会话(如果它仍然附加在其他地方),“ -r ”告诉screen将会话重新附加到当前终端。

根据您要复制的输出量,重新附加时输出可能已超出初始终端缓冲区。但是,如果输出那么多,日志文件也将包含您的所有输出。

希望有帮助。

  • [`tmux` 是一个更现代的`屏幕`。](https://superuser.com/q/236158/31983) (5认同)

use*_*751 8

您可以使用 来xsel设置 X 中的剪贴板,并且可以设置DISPLAY变量来告诉它要连接到哪个 X。只要您使用相同的用户帐户,从终端启动的程序在连接到 X 时应该没有问题(如果DISPLAY已设置)。

some command | DISPLAY=:0 xsel -ib
Run Code Online (Sandbox Code Playgroud)

然后粘贴。


sud*_*dus 6

一个好的选择是安装bsdutils和使用script

sudo apt install bsdutils
Run Code Online (Sandbox Code Playgroud)

并运行

$ script
Script started, file is typescript
$ type commands
get output
...
$ exit
Run Code Online (Sandbox Code Playgroud)

之后,您可以从另一个地方(例如终端窗口)读取命令和输出,以less -R处理 ANSI 格式,但它cat也可以使用。

$ less -R typescript
Run Code Online (Sandbox Code Playgroud)