问题标签 [pty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Synchronizing PTY output with Eventmachine
I'm trying to write an EventMachine server to run an nCurses application via telnet or ssh, using ruby 1.9.3's PTY and io/console modules:
If I play with the value of the argument passed to @reader.read, I can get portions of the screen to display on the client side, however I don't know how to determine the actual size of the client's terminal, either initally or after the client resizes the terminal.
How can I synchronize the output with the size of the client's terminal? Is it possible with telnet/netcat or do I have to use a more robust protocol like ssh?
Thanks in advance.
c - 使用 pty 编译 GCC 时出错
我用 C 搞乱了 pty,但由于某种原因,代码无法编译
我用 -lutil 编译,并输出下一个错误:
我错过了什么?
注意:我在 ubuntu 12.04 LTS 64 位中编译
编辑:尝试gcc test3.c -o test3 -lutil
没有成功。
linux - 对多个调试终端使用 linux 伪终端 API
Ubuntu Linux:如何获取指向
伪终端对的主端的路径?......从端很容易......但主端似乎只作为一个打开的文件描述符存在,但似乎没有有效的 Linux 路径。
关于工作 Linux 伪终端示例http://www.man7.org/tlpi/code/online/all_files_by_chapter.html#ch64 在这本非常好的 Liunx API 书的最后一章中介绍:http://www.nostarch .com/tlpi
关于 Linux linux 伪终端 API 当前状态的问题。上面提到的示例,根据 PTY 从站的要求将分叉/执行程序的 stdin/stdout/stderr 流重定向到 PTY 从站……在 PTY 的那一侧很高兴。
但是我需要作为参数传递给多选项卡式终端仿真器进程的伪终端主机路径似乎还不存在。
我的问题是关于为伪终端对的主端创建命名路径......尽我所能,在上面提到的示例代码中,只有 PTY 从端实际上有一个名称,作为 PTY 主端仅通过打开的文件描述符引用...当我通过“readlink(”/dev/fd/3“...)查询主端路径时,它返回 PTY 主克隆路径”/ dev/ptmx”,因此我推测 PTY Master 端可能还没有路径名?..我想我可能需要通过调用链接()来创建一个有效的路径....但是链接()只接受一个现有的路径,而不是一个打开的文件描述符作为它的参数?...所以我尝试调用 link("/dev/ptmx", NewPTM_name) refurning 到 PTY cloan 设备,希望它可以创建一个链接到生成的 PTY 主机边,但该调用失败,返回-1。
然后我想将这个 PTY Master 侧路径字符串参数传递给终端仿真器,可能是通过它的命令行,或者在 RoxTerm 的情况下可能是 DBus ...
我意识到许多终端仿真器程序都有一个 -e 或 -x 参数,允许一个人在终端窗口内运行程序......不幸的是,采用这种方法并不倾向于让一个人对父/子进程树有太多控制权...这是必需的,因为这项工作支持共享内存多处理系统。
python - 伪终端上的 tty.setraw 在 OS X 中挂起
这是一个在 Ubuntu 系统上完美运行的代码片段,但在 OS X 上调用 setraw 会使 Python 进程挂起。
这段代码有问题,还是 OS X 的行为不同?过去它可以工作,但我们代码中的一些细微变化使它现在在 OS X 中阻塞......
ruby - 将多个值传递给 PTY 终端
我正在尝试使用 ruby 与 CLI 交互,该 CLI 使用 PTY 获取多个值。但是,我只能获取 PTY 生成的伪终端来查看我传递的第一个值。下面的测试脚本:
测试.rb
输入测试.rb
$ > 猫测试.log
我不明白为什么它只收到第一个响应。
PS 我知道 expect 可以在这里使用,但我用自定义函数替换了它,以便更好地控制正在发生的事情以进行调试。
php - 了解 ssh2_exec() 中的 PTY 参数
下面的答案并不让我满意,我想知道更多关于发生了什么。 谁能解释 ssh2_exec() 函数调用中的 $pty 参数
它是强制客户端告诉服务器生成 PTY 还是 PTY 完全是客户端的?据我所知,它附加到诸如 SSHd 之类的进程,这需要调用服务器。此外,当设置为true时,它是否模拟默认 shell?它是什么?我知道你可以通过xterm例如,它模拟 PTY,这有什么不同吗?从我的角度来看,仿真意味着它不是真正的 PTY。
读起来可能有点混乱,但我正在努力掌握这个概念。谢谢你。我很感激。
c# - 如何在 C# 中模拟 ANSI 终端?
我在 Mono 中有一个应用程序,它创建一个腻子窗口,连接到它的 PTY 并通过它与世界通信。
感谢 Putty,我有一个完整的终端,我可以将特殊代码(如 Ctrl+C、Ctrl+Z)发送到我的应用程序。
我想回到我的终端,在其中启动应用程序。我想抓住尽可能多的组合键。这样我就可以通过 ssh 使用我的应用程序,而不会弹出任何窗口。
我的想法是从 /dev/ 检索我当前的终端,忽略(或处理)所有可能的信号,轮询按下的键并转发到我的应用程序。这可以在 C 中使用 P/Invoke 完成。
这是可能的,但编码是痛苦和耗时的。
我想知道它是否已经完成了?你知道任何图书馆吗?最好的选择是注册一个或两个回调,但任何使它更容易的解决方案都会很棒。
TL;博士
我需要一个库来提供我的界面,例如:
并允许我接收 ANSI 终端代码作为字节序列。
替代方案是根据 ANSI 终端规则转换ConsoleKeyInfo
为的库。byte[]
terminal-emulator - 如果我有 ptty,是否需要实现终端仿真?
如果我有一个给我的伪终端(比如一个 pty-req(http://www.ietf.org/rfc/rfc4254.txt)),我需要模拟返回的数据,还是已经模拟的数据?
python - 如何为我在 pty 下运行的进程设置终端前台进程组?
我编写了一个简单的包装脚本,用于在命令失败时重复命令retry.py。但是,当我想查看子命令的输出时,我不得不使用一些 pty 技巧。这对于像 rsync 这样的程序可以正常工作,但是像 scp 这样的其他程序应用额外的测试来显示他们的进度表等东西。
scp 代码有一个广泛的测试:
当我通过包装脚本运行时失败了。正如您在我的简单 tty_test.c 测试用例中看到的那样:
和:
我尝试使用 tcsetpgrp(),它最终作为 pty fd 上的 IOCTL,但这会导致 ptys 出现 -EINVAL。如果可能的话,我宁愿继续使用 Python 子进程机制,或者是否需要手动 fork/execve'ing?
python - 让 PyRun_InteractiveLoop() 在 linux 上从另一个 pty 获取输入/输出
在一个 C 程序中,我想运行一个 Python 交互式循环,该循环从一个伪终端(例如 pts/4)获取输入并将其输出到与启动 C 程序的终端(例如 pts/1)不同的伪终端(例如 pts/4) .
运行交互式循环的基本方法是:
然而,这并不能解决问题,因为它使用的是启动程序的伪终端 (pts/1),而不是 pts/4。
一个有效的解决方案是:
此解决方案的缺点是它使文件描述符 0 1 2 无法与启动程序的伪终端进行通信。虽然这些描述符可以事先复制,但有些函数坚持使用 0 1 2 并且不能使用复制的 fds。
理想情况下,我们希望交互式循环不依赖 fds 0 1 2,并像这样在 /dev/pts/4 上运行:
不幸的是,这并没有按预期工作,并且与使用标准输入具有相同的效果,标准输入默认使用启动程序的伪终端。
所以问题是双重的:
- 如果 PyRun_InteractiveLoop() 只能在 stdin / fds 0 1 2 上运行,为什么它根本不需要任何参数?
- 如果它实际上可以在 stdin / fds 0 1 2 以外的其他东西上工作,特别是在用户定义的伪终端上,应该如何调用它来做到这一点?