标签: tty

访问更高的 TTY 和 getty 的角色

在尝试理解 TTY 时,我有一些黑暗区域。

  • 在我的系统上,我有/dev/tty[1-63]. 正在udev创建这些字符设备吗?以及如何访问它们(例如可以使用 Ctrl+Alt+F2 访问 tty2)?/dev/tty40例如,我如何访问?

  • 据我了解,当我访问/dev/tty1, 时agetty被调用,然后调用login. agetty电话之外的真正作用是login什么?

tty getty

1
推荐指数
1
解决办法
1189
查看次数

为什么 ssh 实用程序被视为 pty?

我读过这里ssh被认为是一个PTY。为什么?如果我ssh在控制台中运行命令(比如在 Debian 服务器中),这里的“pty”方面从何而来ssh?对我来说,这就像我在使用任何其他实用程序,如catsed,那么这里的“pty”方面从何而来?

screen或者tmux使用这个术语似乎更合理(尽管我认为它很不常见,这些应该被命名为“多路复用器”)。

ssh tty terminology console pty

1
推荐指数
1
解决办法
3592
查看次数

什么负责将 /dev/pts/10 与 stdout/stdin/stderr 连接?

tty在终端中的 a上运行命令时,它返回/dev/pts/10

除此之外还有文件/dev/stdout /dev/stdin/dev/stderr. 直接与他们互动会在终端中显示结果。

user@laptop:build$ tty
/dev/pts/10
user@laptop:build$ echo "Test" > /dev/stdout
Test
user@laptop:build$ echo "Test" > /dev/stdin
Test
user@laptop:build$ echo "Test" > /dev/stderr
Test
Run Code Online (Sandbox Code Playgroud)

同时,任何CLI应用程序,从shell启动,将有描述打开文件stdout/ stderr/ stdin。即,如果您运行打印某些内容的脚本,则打印相当于写入stdout.

到目前为止stdout/ stderr/stdin是唯一的接口shell工作与。应用程序也是如此。

某些操作系统组件最终会移动写入stdout终端的数据,否则我将看不到任何打印内容。

stdout/stdin/stderr终端之间的连接何时何地发生,以便与std*终端上的某些内容进行交互?

我想挑战的粗略假设是:

/dev/stdout,/dev/stdin并且/dev/stderr由正在运行的 shell 创建,它们在没有 shell 的情况下不存在。

Shell 使用代表终端的实际设备文件 ( /dev/pts/10)建立通信通道/dev/stdout/dev/stdin并通过、和公开终端功能/dev/stderr。通过这种方式,shell 为应用程序提供了一个简单的文件界面,而不是让每个应用程序担心如何处理设备文件以进行简单的打印。 …

linux shell tty

1
推荐指数
1
解决办法
1070
查看次数

长命令行 ( > $COLUMNS ) 如何自动换行?

有几个点可以通过 I/O,其中一些(据我所知)是 shell、pty、tty、termios、终端模拟器应用程序。在大多数终端模拟器中,长命令行(超过当前 $COLUMNS 的命令行)在用户通过按 Enter 提交命令之前换行到一个新行。此外,当如预期的那样从命令行中删除适当数量的字符时,该行将向后换行到上面的行。

我的问题是:这种魔法通常在哪里处理?它是 termios 设置,还是 shell 的一部分,还是终端模拟器应用程序对此负责?

有关更多上下文,我在 Ubuntu 上使用 Terminator 终端模拟器应用程序 - 换行工作非常好(所以我的 $PS1 提示应该没有问题)。但是我正在开发我自己的终端模拟器应用程序,它与 go pty spawner (github.com/kr/pty) 一起工作,我遇到了长行没有换行的问题,但是同一行。

shell terminal-emulator terminal tty pty

0
推荐指数
1
解决办法
1463
查看次数

如何在 /dev/ttyS0 上设置自定义权限,以便它们在重启后仍然存在?

每次重新启动后,我必须设置chmod o+rw /dev/ttyS0为能够通过bash.

设备关闭后是否可以保存权限以及波特率、位、停止位和奇偶校验?

permissions tty devices serial-port

0
推荐指数
1
解决办法
3127
查看次数

为什么“if tty -s”有效而“if [ tty -s ]”无效?

请注意,我ksh在 CentOS 中使用和运行。

我有一个 shell 脚本,其中记录器功能设置为:

if tty -s
then
  echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
  echo "${FOO}" >> ${BAR_LOG_FILE} 
fi
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我将它重构if为看起来像if我代码中的所有其他测试时,它停止运行。

为什么?

我的重构如下:

if [ tty -s ];
then
  echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
  echo "${FOO}" >> ${BAR_LOG_FILE} 
fi
Run Code Online (Sandbox Code Playgroud)

我唯一的改变是在 周围加上括号if并添加一个;,就像我的其余if测试一样,它们都按预期工作。

我的重构导致了一个错误,看起来像BAR_LOG_FILE无法找到。

这里发生了什么?

ksh tty test

0
推荐指数
1
解决办法
210
查看次数

当输出显示在另一个终端中时,为什么不询问密码

当我使用时:

date > /dev/tty3
Run Code Online (Sandbox Code Playgroud)

输出被传送到第一个 cli 终端。

但我的问题是为什么终端不要求输入密码。我们使用终端进行输出,命令被传递到终端,那么如何在不询问密码的情况下向我们显示输出。

password terminal tty

0
推荐指数
1
解决办法
48
查看次数

由于 dd if=/dev/sda,PC 扬声器发出哔哔声和杂乱的终端字体?

跑步时

sudo dd if=/dev/sda
Run Code Online (Sandbox Code Playgroud)

内部 PC 扬声器发出声音。也是所有字体,甚至提示和打字输入都有不同的字符,例如“?” 或者 ”•”。

如果您需要了解更多,请发表评论。

我通常做的是 of=/dev/null 或 >>/dev/null 用于读取性能测试和旋转光驱(使用count=1 iflag=direct skip=500000),其中我跳到 LBA 500000 将激光镜头放在中央数据部分。但是我想尝试一下,如果我不将输出重定向到任何地方会发生什么,然后就发生了。

有趣的事实:同样的情况也发生在 Windows 上。

terminal-emulator terminal tty

-1
推荐指数
1
解决办法
120
查看次数