Tilda 在啟動時抱怨螢幕尺寸虛假?
在 Ubuntu 14.04 上,MATE 桌面。我剛剛安裝了 Tilda 終端,所以我將它添加到啟動應用程序中,就像
/usr/bin/tilda
. 重新啟動,看到 Tilda 啟動,然後注意到這一點:“你的 131072x1 螢幕尺寸是假的。期待麻煩”
然後我嘗試
killall tilda
了,再次啟動 tilda,同樣的資訊。任何人都知道如何解決這個虛假的螢幕尺寸問題?
是什么生成此消息
這不是由 Bourne Again shell 生成的。這不是 Tilda 製作的。
這是由procps 工具集中
ps
的命令在其函式中執行此檢查產生的。該命令要求您的終端設備至少為 9 列乘 2 行,以便它能夠合理地顯示內容。在某個地方,您可能不知道,您正在呼叫.set_screen_size()
ps``ps
該
ps
命令直接從附加到其標準 I/O 文件描述符的終端設備(的行規程)獲取您的終端大小,如果它們的值是正確的數字,則允許它被COLUMNS
環境LINES
變數覆蓋。您可以通過執行來查看您的ps
命令所看到的內容,以便做出決定:stty 大小;printenv 列行
您可以通過執行以下操作來試驗 pull
ps
的腿:列=65535 行=1 ps
如果您已將
COLUMNS
和LINES
環境變數設置為愚蠢的 131072×1 值,如 的輸出所示printenv
,那麼就不要這樣做。☺ 然而,終端設備本身報告這個大小的可能性更大,你可以從stty
. (請注意,Bourne Again shell 所做的checkwinsize
只是設置這些 shell 變數的值,如果不導出這些變數,甚至不會將其傳遞給ps
其環境中的命令,無論終端設備報告的大小是什麼。checkwinsize
紅色也是鯡魚,如果環境變數是廢話,終端設備本身就是在報告廢話,而後者是要解決的潛在問題。)這就是為什麼雖然它沒有產生消息,但 Tilda 可能有問題。終端設備大小是一種共享資源,任何對終端設備具有打開文件描述符的東西都可以通過
ioctl()
系統呼叫任意更改。但是按照慣例,在使用像Tilda這樣的軟體終端仿真程序的場景中,當顯示仿真的GUI視窗的大小發生變化時,由終端仿真程序設置。終端模擬器程序獲取一個 GUI 調整大小事件,將其轉換為列和行,並使用ioctl()
.這並不是說其他東西沒有將大小設置為這種廢話。畢竟,您可以通過執行以下命令自行將其設置為任意大小:
stty 列 1 行 65535
這讓我們……
如何重置終端設備大小
如果您發現自己處於終端設備報告無意義大小的位置:
- 如果您使用的是 GUI 終端仿真器,請按列/行左右調整 GUI 的大小。這應該觸發
ioctl()
並將終端大小設置為合理的值。- 使用(例如)將大小設置為更合理的值:
stty 列 80 行 25
- 使用
reset
命令。請注意,reset
除了終端設備大小之外,它還設置了許多其他內容。- 如果您的終端仿真器與 DEC VT340/VT420 兼容,請直接發出適當的 DECSCPP 和 DECSLPP/DECSNLS 控制序列,或使用nosh 工具集的
console-resize
(又名resizecons
)命令發出它們:調整大小 80x25