為什麼我在使用螢幕時無法滾動或使用 ctrl-a/ctrl-e?

為什麼我在使用螢幕時無法滾動或使用 ctrl-a/ctrl-e?

我使用 iTerm2,我意識到當我使用 screen 時: ssh -t [username]@[domain].edu 'screen -DR'

我注意到以下異常情況:

  • 我無法使用滑鼠在 iTerm2 視窗中上下滾動

  • 我無法使用 ctrl-a 轉到行首

  • 我無法使用 ctrl-e 轉到行尾

  • 我的 ~/.bash_profile 沒有來源

我確信還有其他人,但我怎麼能讓行為就像我只是在沒有螢幕會話的情況下 ssh 一樣?

答案1

您提到的鍵盤快速鍵是由 Bash shell 實現的。如果它們不起作用,這可能意味著您出於某種原因沒有使用 Bash 作為 shell - 儘管 Screen 啟動與 SSH 不同的 shell 有點奇怪:

  • 檢查您的~/.screenrc檔案是否有任何“shell”或“defshell”命令。
  • getent passwd $USER檢查最後一個欄位報告的 shell 是否為 /bin/bash。
  • 檢查printenv SHELL(螢幕外)是否與getent報告相符。

在某些系統上,如果您的實際登入 shell 設定為奇怪的內容,您可能需要手動告訴 Screen 使用帶有shell bashscreenrc 設定的 bash。 (例如,您的伺服器可能實際上將 /bin/sh 作為使用者帳戶的 shell,但 sh 的 ~/.profile 然後配置為在頂部啟動 /bin/bash。在這種情況下,「sh」shell 啟動by Screen 不會讀取~/.profile 並且不會跳到bash。


您的 ~/.bash_profile 不會來自非「登入」shell。你啟動的外殼 Screen是一個「登入」shell; Screen 中的腳本通常是非登入的,並且預計它們只會載入 ~/.bashrc 而不是任何「設定檔」腳本 - 這是為了避免每個新的 Screen 視窗不必要地啟動初始 shell 已啟動的內容。

應該放入別名和函數之類的內容,但 screenrc 中的「shell」設定可用於透過在其命令前添加前綴,例如~/.bashrc來強制 shell 以「登入」模式啟動。--bash


標準的基於終端的滾動不適用於Screen 或tmux 等多路復用器,這部分是設計使然:多路復用器是它自己的終端模擬器,並以更直接的方式驅動外部終端,而文本則沒有那麼多滾出就這樣刪除並覆蓋

例如,當您的螢幕會話有兩個水平分割的窗格時,底部窗格中的文字在即將滾動到視圖之外時必須明確刪除,否則您最終會在頂部窗格中看到垃圾。 (如果您的 Screen 會話有兩個垂直分割的窗格,回滾將如何運作?)

因此,Screen 通常被配置為故意將外部終端切換到「備用螢幕」模式,從而在一段時間內停用 iTerm2 的回滾。您可以嘗試使用altscreen offscreenrc 中的設定來防止這種情況發生,但不要指望 iTerm 的回滾有多大意義。

您可以不執行此操作,而是使用Ctrl-a[能夠捲動特定窗格的方式進入螢幕的「複製模式」。

相關內容