pty

xterm 似乎改变了 emacs 的“home”键行为
pty

xterm 似乎改变了 emacs 的“home”键行为

在 xterm 中,当我按键盘上的 HOME 键时,它通常会发送,^[[H但是当我打开时emacs -nw,它会更改为^[OH;这些分别是home和khome。我在尝试构建自己的终端时发现它^[[H在 emacs 中不起作用。但是,我无法弄清楚是什么导致 xterm (或 emacs)改变其行为。 此外 home“应该”对应于和的键khome(我通常使用的 home 键,以及关闭数字锁定的键盘上的 1) - 在我尝试过的每个终端上始终执行相同的操作,即使 xev 显示它们是不同的,所以对于其余的对于这个问题,我会将它们视为同一件事。 它似乎与 pty 设置...

Admin

如何使用 getty 将 bash 进程连接到 tty _without_
pty

如何使用 getty 将 bash 进程连接到 tty _without_

我将有两个串行 USB 设备相互连接,/dev/ttyUSB1并且/dev/ttyUSB2.我想/bin/bash连接到一端运行,以便我可以使用 picocom 连接到另一端并将picocompicocom 用作本地终端模拟器。 我尝试过这样的事情 setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1 然后用picocom连接到另一端,但我只是得到一个充满乱码的屏幕(:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m...

Admin

当我使用 socat 创建自己的 pty 对时,作业控制不起作用
pty

当我使用 socat 创建自己的 pty 对时,作业控制不起作用

我正在尝试通过查看拼图的不同部分来理解终端模拟器。 我正在尝试使用 socat 启动 pty 对和 shell 进程,然后使用 picocom 连接到它。 这是我对 socat 命令的理解: $ socat -d -d PTY,raw,echo=0 EXEC:"/bin/sh",pty,stderr,setsid,sane 2024/03/12 08:12:16 socat[9106] N PTY is /dev/pts/5 2024/03/12 08:12:16 socat[9106] N forking off child, using pty for ...

Admin

如何获取子进程内部 PTY 的文件描述符?
pty

如何获取子进程内部 PTY 的文件描述符?

https://man7.org/linux/man-pages/man7/pty.7.html 在“UNIX 98伪终端”中据说ptsname可以使用(然后open),但是这个函数接受文件描述符。我尝试将 0 (STDIN) 和 1 (STDOUT) 放在那里,但失败并显示“设备的 ioctl 不合适”。我从 gnome 终端运行我的程序 我不写另一个xterm程序。只是想拥有用于异步(非阻塞)非规范低级输入和输出的文件描述符。 ...

Admin

伪终端互相控制,如何获取返回显示
pty

伪终端互相控制,如何获取返回显示

问题是:我的伪终端是 /dev/pts/0,目标伪终端是 /dev/pts/4,我试图让目标伪终端使用 echo text > / 打印文本dev/pts/4 命令。 所以第一个问题是:在我使用 echo text > /dev/pts/4 命令后,目标主机确实显示了文本,但一个缺点是目标在显示文本后会显示另一行,你必须手动按ctrl+c结束,如何避免上述情况? 其次,我认为使用 man pty > /dev/pts/4 后,目标伪终端确实打开了一个 pty 手册,但缺点是我的伪终端在显示文本后也会产生一个空行,而且无论我尝试用 ctrl ...

Admin

当设置程序在另一个终端上运行时,如何抑制GDB中的“无法设置控制终端”警告?
pty

当设置程序在另一个终端上运行时,如何抑制GDB中的“无法设置控制终端”警告?

我正在使用 GDB 来调试程序,并且希望将其输出定向到与运行 GDB 的终端不同的终端。这就是我一直在做的事情: 打开第二个终端,使用 检查其设备名称tty,并获得类似 的内容/dev/pts/14。 在我的 GDB 会话中,我使用命令tty /dev/pts/14将输出设置到该终端。 然后我run在 GDB 中发出命令来启动程序。 此设置确实正确地将输出定向到终端 2,但问题是终端 2 上的第一行总是显示: warning: GDB: Failed to set controlling terminal: Operation not permitted...

Admin

如何重新拥有一个流程?
pty

如何重新拥有一个流程?

当我使用快捷方式(sxhkd)运行此脚本时: #!/bin/sh MUSIC_DIR="$HOME/music" songs=$(ls "$MUSIC_DIR") filename=$( echo -e "random\n$songs" | dmenu -l 30 -i -p "Play >> ") if [[ $filename = "random" ]] then filename=$(ls "$MUSIC_DIR" |shuf -n 1) fi if [[ -f "$MUSIC_DIR/$filename" ]] then...

Admin

如何让 socat 模拟拔出串行设备
pty

如何让 socat 模拟拔出串行设备

我有这个测试程序 import sys for line in sys.stdin: print(line.strip()) print("DONE") 如果我让它从真实设备(FTDI)打印出行 python3 demo.py < /dev/ttyUSB0 然后它打印我发送的每一行,然后当我拔出 USB 电缆时,我看到DONE消息 另一方面,如果我用 socat 创建一个假 tty socat -d -d pty,raw,echo=0,link=ttyFake pty,raw,echo=0,link=ttyFake.interface ...

Admin

尝试让我自己的 shell 正确处理 ctrl+c
pty

尝试让我自己的 shell 正确处理 ctrl+c

我试图了解 shell 是如何设置的,以便当您按 ctrl C 时,它们正在运行的程序会收到 SIGINT,但 shell 不会,因为当您运行 bash 时,并在内部运行另一个程序,然后按 CTRL +C,您正在运行的程序停止,但 bash 没有。 当您从另一个 shell 中启动 bash 时,这甚至适用。 我尝试制作自己的特殊 shell 程序,当您按任意键时,它只运行一个子程序。 #! /usr/bin/env bash set -e while true do echo press any key to run $@ read -...

Admin

我可以在没有 pty 的情况下设置串行终端 (RS-232) 吗?
pty

我可以在没有 pty 的情况下设置串行终端 (RS-232) 吗?

我有两台计算机,它们都有一个 RS-232 端口,并/dev/ttyS0通过空调制解调器连接在一起。 我试图一点一点地了解外部终端在过去是如何工作的,以及它与今天的 Linux 工作方式有何关系。 我已经让它像这样工作了: 主计算机: $ sudo socat /dev/ttyS0,raw,echo=0 exec:"/bin/bash -i",pty,stderr,setsid,sigint,sane 终端: picocom -b 9600 /dev/ttyS0 然而,这pty里面有 - 这就是为什么我在终端上得到这个: # tty /dev/pts/1...

Admin

如何确定loginctl中的图形tty
pty

如何确定loginctl中的图形tty

Loginctl 列出了很多会话,我想以编程方式知道哪一个是图形会话(例如 GNOME 桌面)。 在下面的示例中,我打开了一个 GNome 桌面会话、一个 ssh 连接和一个文本会话 (getty)。 $ loginctl SESSION UID USER SEAT TTY 3 1000 user seat0 tty2 237 1000 user pts/2 260 1000 user seat0 tty3 3 sessions listed. $ 我可以猜测 tty2 是 GNome 会话,因为我可以使...

Admin

用于两个进程之间通信的伪终端
pty

用于两个进程之间通信的伪终端

我正在编写一个使用第三方 C 库的可执行文件(libmodbus如果重要的话)通过串行设备进行通信(在我的例子中,/dev/ttyUSB0或者类似于通过基于 FTDI 芯片组的 USB 到 RS485 适配器进行 RS-485 通信)。这个基于 CLI 参数的可执行文件可以启动命令(在我的例子中,就像 modbus 客户端一样)然后等待响应(在我的例子中,来自外部 modbus 服务器),或者监听传入的命令(在我的例子中,就像modbus 服务器)然后生成响应。 我想自动测试我的可执行文件,而不需要某些外部设备。换句话说,我想启动可执行文件的两个实例,其中:...

Admin

/proc/self/fd/2 无法在 `sudo -u other_user` 下访问
pty

/proc/self/fd/2 无法在 `sudo -u other_user` 下访问

我经常用来tee /proc/self/fd/2向 stdout 和 stderr 显示一些内容,捕获 stdout,同时仍将所有输出保留到 stderr。 例如,我有一个do.sh: STD_OUT_STR=$(CMD ARGS ... 2>&1 | tee /proc/self/fd/2) # handle STD_OUT_STR ... ... 这效果非常好。 例如, ./do.sh 基本上是这样运行的: bash -c 'echo hi | tee /proc/self/fd/2' 输出 hi hi 然而,有一天我在 下运行它s...

Admin

如何通过网络管道与正在运行的进程进行终端交互?
pty

如何通过网络管道与正在运行的进程进行终端交互?

如何运行一个希望在终端中执行的程序,使其 STDIO 可以任意远程连接? 具体来说,我希望能够在一台主机上启动 gdb 并远程连接到它的终端界面,这样我就可以使用 CTRL+C 暂停执行、更改布局(例如layout regs)等。下图说明了我正在尝试的内容去完成。 到目前为止,我得到的最接近的是socat在远程主机上使用来创建 pty 并启动 gdb: $ socat PTY,link=$HOME/somedev,rawer, SYSTEM:"gdb 2>&1",pty 然后将该 PTY 通过管道传输到 netcat 侦听器或从 netca...

Admin

使用 socat 模拟串行设备时如何删除缓冲区
pty

使用 socat 模拟串行设备时如何删除缓冲区

我正在创建一个像这样的假串行设备: socat -d -d pty,raw,echo=0 pty,raw,echo=0 这每次都会创建具有新编号的设备。让我们打电话/dev/pty/6给他们/dev/pty/7 为了模拟我的测试机器上没有的硬件设备,我以/dev/pty/6每秒二十行的速度写入。 与此类似(在我的实际项目中,我正在使用 python 编写,但这显示了相同的问题) while true do date > /dev/pts/6 sleep 0.05 done 我注意到,如果我让它cat /dev/pty/7运行几秒钟,...

Admin