我使用的下一个来改变终端尺寸:
rc = ioctl(fd, TIOCSWINSZ, &ws);
当运行此linux下文本终端(由Alt键-CTRL-F1切换),结果是我期望看到。整个我的输入和输出在由ioctl syscall给出的范围内。
但是,当我通过SSH连接到本地主机,并运行相同的程序,它只能部分工作。我的意思是我不能输入比由ioctl设置的终端大小更宽的命令,但是输出可以跨越由ioctl给出的终端的边界,并且输入可以采用由ioctl设置的更多行。此后也没有自动回车和换行。
我直接运行程序时看到的唯一区别是它在终端/ dev/ttyN上运行,它的主数字是5,当我通过SSH运行程序时,它使用/ dev/pts/N作为终端,号码136. 所以,据我了解,这是由于终端的差异。我的问题:
1.是对的吗?终端驱动程序中的原因是什么?
2.我该如何解决?我需要像本地tty终端一样通过SSH的行为。
谢谢!无法在PTY改变终端尺寸/ N(适用于ttyN)
3
A
回答
6
通常TIOCSWINSZ
被tty主控(例如xterm
,Linux控制台本身等等)用来告诉内核驱动程序终端实际上有多大。运行在tty从站(即应用程序本身)上的程序使用TIOCGWINSZ
来查询终端的大小。大多数tty司机不支持以其他方式推动它;通常不能在应用程序的tty slave上调用TIOCSWINSZ
,并让主设备更改其大小。
某些终端(例如xterm
)确实支持转义序列以请求它们调整大小,但这只是一个字节转义序列,而不是ioctl()
命令。
如果你想要应用程序强制终端的大小,那么可移植的是没有办法做到这一点。不可思议的是,你可以应用一些特殊的技巧,例如尝试TIOCSWINSZ
或发送xterm
转义序列。
相关问题
- 1. 使用适用于:尺寸
- 2. 如何获取终端尺寸?
- 3. SearchController改变tableView的尺寸
- 4. 适用于多种尺寸的Android SVG?
- 5. 我无法找到改变画布尺寸的方法
- 6. 改变尺寸<input>
- 7. 无法更改元素的尺寸
- 8. 我无法更改小部件尺寸
- 9. 我无法更改我的Favicon尺寸
- 10. 尺寸图像以适合WebView尺寸
- 11. 更改尺寸
- 12. 改变字符串的尺寸在C#
- 13. 如何改变轴的尺寸在Matlab
- 14. Capistrano的伪终端(PTY)不工作
- 15. 无法检索pagePathLevel1尺寸
- 16. Android - 适用于多种屏幕尺寸的图像的正确尺寸
- 17. TYPO3 8.7 - FSC库:改变行/列尺寸
- 18. 后改变文本尺寸的TextView的适合含量
- 19. 布局改变与屏幕尺寸
- 20. 改变seaborn pairplot的尺寸标记
- 21. 如何改变D3轴的尺寸?
- 22. Android如何改变电影尺寸GIF
- 23. 数据尺寸改变由CCCrypt
- 24. 无法启动pty进程:
- 25. 更改TTPhotoView尺寸
- 26. 更改尺寸JButton
- 27. 导入语句适用于PyCharm,但不适用于终端
- 28. 动态改变splitContainer面板的尺寸
- 29. JPanel的尺寸自动改变
- 30. acm.program.GraphicsProgram,无法获得适当尺寸的画布
所以,回到我的问题: 1.通常是的。司机的原因。因为不是所有的驱动程序都允许将从终端大小推到主机。 2.没有可移植的方式。我可以尝试使用ioctl和转义序列。 是否正确?谢谢! – van 2012-07-15 20:13:50
我的经验(此评论之前几分钟)是xterm不支持vt100“ [8; ; t”转义序列,但是gnome-terminal没有。所以一般来说,这似乎不是您可以依赖的功能。 –
2016-05-11 05:36:14