linux禁止screen打開會話時改變窗口大小

問題來源

  在後臺運行程序時,經常需要常駐後臺。現有的terminal一旦斷線程序就會結束,screen提供了一個遠程保持會話的機會,將程序運行在screen打開的會話中,重新登錄上遠程服務器後,可以恢復到原來的會話。類似的工具還有tmux。
  screen在使用過程中,因爲遠程會話窗口具有標準大小,因而會改變terminal終端的大小,在使用過程中窗體大小突然變了,非常煩。根據博主的經驗,在xshell中不會發生這個問題,但是在zoc, putty, securecrt等工具中會出現。

解決方案

從終端入手

  部分終端提供了拒絕改變遠程窗口大小的設置,xshell不受影響應該也是類似的原因。在putty中,可以通過菜單項來進行配置:

 Configuration -> Terminal -> Features -> Disable remote-controlled terminal resizing

  其他終端應該也有類似的設置,這個需要去查詢相應的文檔了。

從screen配置入手

  如果不知道怎麼從終端解決,可以修改服務器上的screen設置。博主使用的是ubuntu 16.04系統,打開screen的配置文件/etc/screenrc,其中有一行內容如下:

termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

在xterm後面加上一個星號即可。

termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

然後,使用screen打開新窗口或者連接舊窗口,窗口大小即不會發生變化。

  這個辦法的好處在於修改後無論哪個終端都不會有問題,麻煩的地方在於只能挨個去修改服務器配置。

其他screen相關命令

  博主使用screen主要是後臺長時間跑程序,所以這裏記一些常見的命令。

查看正在運行的窗口

screen -ls

如下是一個示例
在這裏插入圖片描述
其中10594和10582分別是兩個會話id,10594指定了一個便於記憶的名稱test。

打開新窗口

//打開一個新窗口
screen

//打開一個名爲test的新窗口
screen -S test

連接到一個正在運行的窗口

//通過id連接
screen -r 10594

//通過名稱連接
screen -r test

將會話置於後臺

有時間需要臨時退出會話,即detach, 可以用以下快捷鍵。此時,會話仍以當前狀態在後臺運行,可以通過screen -r 重新連接。

Ctrl + a + d

中止會話

在會話中敲入exit命令就可以退出會話,此時會話結束,不可重新連接。

exit

在會話中滾動屏幕

會話中展示的屏幕高度有限,有時間經常需要往回查找之前執行的命令和結果。此時可以通過以下命令進入copy mode。在copy mode下可以使用vi的一些基本命令,例如j/k上下滾動,Ctrl+b/f 翻頁等其他操作,通過Esc退出copy mode。

Ctrl + a + [

通過這些命令,就可以滿足screen後臺跑程序的基本功能。當然,screen的用法不止如此,有興趣的同學可以繼續探索。

參考

CentOS 6下禁止運行screen 或建立新窗口時更改窗口尺寸
解決SSH遠程登錄後屏幕尺寸不對的問題
Linux Screen command resizing Putty terminal window.
Screen下如何滾動窗口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章