蒂爾達抱怨啟動時螢幕尺寸是假的?

蒂爾達抱怨啟動時螢幕尺寸是假的?

在 Ubuntu 14.04 上,MATE 桌面。我剛剛安裝了 Tilda 終端,因此我將其添加到啟動應用程式中,就像/usr/bin/tilda.重新啟動,看到 Tilda 啟動,然後注意到這一點:

蒂爾達

“您的 131072x1 螢幕尺寸是假的。預計會有麻煩”

然後我嘗試了killall tilda,再次啟動 tilda,出現同樣的訊息。

有人知道如何解決這個虛假的螢幕尺寸問題嗎?

答案1

是什麼產生了此訊息

這不是由 Bourne Again shell 產生的。這不是蒂爾達製作的。

這是由ps以下命令產生的procps 工具集表演這個檢查它的set_screen_size()功能。該ps指令要求您的終端設備至少為 9 列 x 2 行,以便能夠合理地顯示內容。在某個地方,您可能不知道,您正在調用ps.

ps命令直接從附加到其標準 I/O 檔案描述符的終端設備(的線路規則)獲取終端大小,並且如果它們的值是正確的數字,則允許被環境變數COLUMNS覆蓋。LINES您可以ps透過執行以下命令來查看命令所看到的內容,以便做出決定:

stty 大小; printenv 列 行
您可以透過執行以下命令來嘗試拉動ps腿部:

列=65535 行=1 ps

如果您已將COLUMNSLINES環境變數設為愚蠢的 131072×1 值(如 的輸出所示)printenv,那麼就不要這樣做。 ☺ 然而,終端設備本身更有可能報告此大小,您可以從 的輸出中看到這一點stty。 (請注意,Bourne Again shell 所做的全部工作checkwinsize就是設定這些 shell 變數的值,如果不匯出,這些變數甚至不會傳遞到ps其環境中的命令,無論終端設備報告大小如何。checkwinsize紅色也是如此。鯡魚,如果環境變數是無意義的,終端設備本身正在報告廢話,後者才是要解決的根本問題。

這就是為什麼雖然它沒有產生蒂爾達可能有錯的消息。終端設備大小是一種共享資源,任何具有終端設備開啟檔案描述符的東西都可以透過ioctl()系統呼叫任意更改。但它是按照慣例設置,在使用軟體的場景中終端仿真程式與 Tilda 一樣,當顯示模擬的 GUI 視窗的大小改變時,由終端模擬器程式執行。終端機模擬器程式取得 GUI 調整大小事件,將其轉換為列和行,並使用 設定設備大小ioctl()

這並不是說其他東西沒有為這種廢話設定大小。畢竟可以設定你自己只需執行以下命令即可達到任意無意義大小:

stty 列 1 行 65535

這讓我們想到…

如何重置終端設備大小

如果您發現終端設備報告的大小是無意義的:

  • 如果您使用的是 GUI 終端仿真器,請按列/行左右調整 GUI 的大小。這應該會觸發ioctl()並將終端大小設為合理的值。
  • 將大小設定為更合理的值(例如):

    stty 列 80 行 25
  • 使用reset命令。請注意,reset除了終端設備大小之外,還設定了許多其他內容。
  • 如果您的終端機模擬器與 DEC VT340/VT420 相容,請直接發出適當的 DECSCPP amd DECSLPP/DECSNLS 控制序列,或使用諾許工具集console-resize(又名resizecons) 命令來發出它們:

    調整大小 80x25

相關內容