2012-07-14 32 views
3

我使用的下一個來改變終端尺寸:
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)

回答

6

通常TIOCSWINSZ被tty主控(例如xterm,Linux控制檯本身等等)用來告訴內核驅動程序終端實際上​​有多大。運行在tty從站(即應用程序本身)上的程序使用TIOCGWINSZ來查詢終端的大小。大多數tty司機不支持以其他方式推動它;通常不能在應用程序的tty slave上調用TIOCSWINSZ,並讓主設備更改其大小。

某些終端(例如xterm)確實支持轉義序列以請求它們調整大小,但這只是一個字節轉義序列,而不是ioctl()命令。

如果你想要應用程序強制終端的大小,那麼可移植的是沒有辦法做到這一點。不可思議的是,你可以應用一些特殊的技巧,例如嘗試TIOCSWINSZ或發送xterm轉義序列。

+0

所以,回到我的問題: 1.通常是的。司機的原因。因爲不是所有的驅動程序都允許將從終端大小推到主機。 2.沒有可移植的方式。我可以嘗試使用ioctl和轉義序列。 是否正確?謝謝! – van 2012-07-15 20:13:50

+0

我的經驗(此評論之前幾分鐘)是xterm不支持​​vt100「 [8; ; t」轉義序列,但是gnome-terminal沒有。所以一般來說,這似乎不是您可以依賴的功能。 – 2016-05-11 05:36:14