标签: tty

如何检测stdout是否连接到Perl中的tty?

我正在寻找相当于这个Python代码的Perl:

from sys import stdout
if stdout.isatty():
    print "yes"
else:
    print "no"
Run Code Online (Sandbox Code Playgroud)

perl stdout tty

14
推荐指数
2
解决办法
3859
查看次数

如何找到连接到哪个物理设备/ dev/console?

有一个名为的设备文件/dev/console,其名称(major,minor)(5,1).当我使用串行控制台启动时,它会像我一样连接到我的UART端口/dev/ttyS0.但是当我禁用串行控制台启动时,/dev/console似乎连接到其他地方,/dev/ttyS0总是连接到同一个物理设备,即UART0.是否有任何迹象(如/proc或某些内容/sys)显示此类信息?我在那里试过但却找不到我想要的东西.我开始追踪Linux内核源代码以澄清它们之间的关系.任何人都可以给我一些提示吗?何时,何地,如何以及如何确定/dev/console连接的物理设备?

编辑:最新的发现是:

  1. /dev/console由配置console=内核参数,而这又是使用的getty打开stdin/stdout/stderr.如果未console=指定,/dev/null则打开为stdin/stdout/stderr.但我不确定它们是否完全相同/dev/console,这意味着/dev/console可以将其I/O连接到不同的物理设备.
  2. /dev/console如果USB HID键盘已插入console=且未配置为UART ,则可以读取.因此/dev/console== /dev/null似乎没什么意义.需要更多调查.

tty linux-device-driver linux-kernel embedded-linux

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

如何在启动过程后切换linux内核控制台?

在我的嵌入式系统上,我通常使用/ dev/ttyS0作为主控制台.这是通过传递内核参数来实现的,console=/dev/ttyS0并且当init它参与时,getty会在inittab例如由中指定的同一设备上触发.ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100.

是否有可能在不重启的情况下更改这些设置并将控制台切换到另一个终端ttyS1,ttyUSBx甚至是一些伪tty?

linux embedded tty linux-kernel embedded-linux

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

如何完全禁用屏幕中的铃声(视觉和音频)

在屏幕上,有没有办法完全禁用铃声?

我知道你可以切换到音频铃而不是视觉铃,并且已经完成了并且也没有在腻子中指定铃声所以我什么都听不到,但是当一个窗口中有铃声时,我看到一个恼人的弹出窗口其他窗口说"窗口1中的铃"等等.

关于如何摆脱它的任何想法?

linux terminal gnu-screen tty

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

从串口读取时如何实现read()的超时(C/C++)

我正在使用文件描述符和posix/unix read()函数从C++中的串口读取字节.在这个例子中,我从串口读取1个字节(为了清楚起见,省略了波特率设置和类似内容):

#include <termios.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
   int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
   char buf[1];
   int bytesRead = read(fd, buf, 1);
   close(fd);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果连接到/ dev/ttyS0的设备未发送任何信息,程序将挂起.如何设置超时?

我试过像这样设置一个时间:

struct termios options;
tcgetattr(fd, &options);
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
tcsetattr(fd, TCSANOW, &options);
Run Code Online (Sandbox Code Playgroud)

我认为它应该给1秒超时,但它没有任何区别.我想我误解了VMIN和VTIME.什么是VMIN和VTIME用于?

然后我搜索了网络,发现有人在谈论select()函数.这是解决方案,如果是这样,如何将其应用于上面的程序以使1秒超时?

任何帮助表示赞赏.提前致谢 :-)

c unix timeout tty

13
推荐指数
1
解决办法
3万
查看次数

Emacs shell模式中的Python打开stty echo并打破Cd

当我在Emacs shell缓冲区(Mx shell)中运行交互式Python时,它会对TTY做两件令人惊讶的事情.首先,它打开输入echo,它在Python退出后仍然存在,直到我执行stty -echo.其次,它不接受Cd(或Cq Cd,即^ D)作为EOF:我必须键入quit()才能离开Python.我怎样才能阻止这两种行为呢?

我知道我可以运行python-shell,但我不想:我在shell中乱码,我想做五行Python然后用它来做Cd.所以"运行python-shell"不是我的问题的答案.

在终端窗口中运行的Python很好:^ D继续工作,回声不会改变.

Python 2.7.5,GNU Emacs 24.3.1,OS X 10.8.5

编辑从shell缓冲区添加此代码段:

bash-3.2$ echo foo 
foo                     # no echo.
bash-3.2$ cat
foo                     # I typed this.
foo                     # cat returned it; no additional echo.
bash-3.2$ python
Python 2.7.5 (default, May 19 2013, 13:26:46) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>                   # C-d has no effect. C-q C-d has no effect.
                      # not sure where …
Run Code Online (Sandbox Code Playgroud)

python macos emacs shell tty

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

编写冒充TTY的程序

我正在编写一个程序,从stdin读取输入,操作输入,并将输出写入stdout.但是,许多程序检查stdin是终端还是管道(通过调用类似函数isatty),并以不同方式生成输出.我如何让我的程序假装成TTY?

该解决方案应适用于Linux和macOS.任何生成独立二进制文件的编程语言都是可以接受的,但Go是首选.

请注意,我问的是一个编程问题,而不是要求一个工具.所以,我喜欢scriptunbuffer不喜欢的东西.

c linux macos go tty

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

检测stdin是否是PHP中的tty设备(终端)或管道?

我写了一个PHP脚本.我希望它在使用连接到tty设备(终端)的标准输入调用之前显示帮助消息,然后以交互方式进行读取和执行,但是在使用文件或来自管道的流作为标准输入调用时不显示.

有没有办法从PHP中检测到这个?

php stdin file pipe tty

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

Linux中的Xorg(或任何X服务器)和/ dev/tty7之间有什么关系?

当有人说"X服务器在/ dev/tty7上运行"时,我有几个问题.我对它是如何工作做了一些猜测,我希望有人可以告诉我以下陈述是真是假.

  • / dev/tty7通常是Xorg的控制终端.
  • 尽管tty7是Xorg的控制终端,但它并没有以任何有意义的方式"控制"Xorg.
  • Xorg通过轮询/ dev/input/...或类似的东西直接接收键盘和鼠标输入,而不是通过从/ dev/tty7读取.尽管如此,/ dev/tty7还会接收击键,您可以通过在终端仿真器中运行"xxd -p/dev/tty7"来查看(例如).
  • Xorg使用一些特定于硬件的接口在屏幕上绘图,例如驱动程序创建的某个设备文件,或内存的I/O映射区域,而不是写入/ dev/tty7.
  • 当Xorg设置视频模式时,tty驱动程序会自动停止在屏幕上绘图.这就是为什么当你按一个键或将一个字符串回显到/ dev/tty7时,你看不到它出现在屏幕上.
  • 即使tty7在后台,Xorg也会通过/ dev/events接收键盘和鼠标输入,但除非tty7在前台,否则它会忽略它.
  • 无论Xorg在屏幕上绘制什么,只有当tty7在前景时才会在显示器上显示.
  • 当Xorg初始化视频(设置视频模式等)时,这是因为tty7在前台,设置在tty7而不是其他终端上生效.

谢谢!

linux tty xorg

12
推荐指数
0
解决办法
1878
查看次数

kubectl attach:无法使用TTY - 容器es-node没有分配一个

我试图附加到Kubernetes中的正在运行的容器,但是我收到下面的错误消息.

>kubectl attach -it es-client-2756725635-4rk43 -c es-node
Unable to use a TTY - container es-node did not allocate one
If you don't see a command prompt, try pressing enter.
Run Code Online (Sandbox Code Playgroud)

如何在容器yaml中启用TTY?

containers tty kubernetes

12
推荐指数
3
解决办法
8150
查看次数