VimはSSH経由でクライアントクリップボードにコピーする機能を失いました。

VimはSSH経由でクライアントクリップボードにコピーする機能を失いました。

vimサーバーインスタンスから私のクライアントオペレーティングシステム(SSH経由で接続)のクリップボードにテキストをインポートできるようにvimを設定しました。
デフォルト設定は

  • 顧客
    • GNOME端末
  • サービス端末
    • X11セッション転送を使用したSSHの例ssh -Y <user>@<server>
      • マルチプレクサ
        • vim gtk

サーバーで実行されているvimのバージョン -vim-gtkシステムクリップボードにコピーする必要がある追加項目

$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan  2 2014 19:40:46)
Included patches: 1-52
Modified by [email protected]
Compiled by buildd@
Huge version with GTK2 GUI.  Features included (+) or not (-):
  • オペレーティングシステムUbuntu 14.04

vim(サーバーで実行)内でテキストを視覚的に選択できます。次に、をクリックすると、"クライアント+OSyクリップボードで対応するビジュアル選択を使用できます。
これは、サーバーに接続して新しい tmux セッションを開始するときに機能しますが、SSH が停止した後にサーバーに再接続し、tmux セッションに再接続すると、動作は停止します。なぜこれが起こるのかご存知ですか?

答え1

私の解決策は次のとおりです(ポインタへのxpraのおかげで)。問題は次のとおりです。

  1. ローカルとリモートのbashrcが同じであると仮定します。
  2. tmux-sshを使用してリモートサイトに接続します。 -pや-uなどの一般的なssh(1)パラメータが必要です。デフォルトでは、リモートサイトでtmux-x-attach()を呼び出します。
  3. tmux-x-attach() は、実行していない場合は xpra サーバーを起動し、実行中の xpra サーバーに接続して tmux-attach() に送信します。
  4. tmux-attach() は次のいずれかを行います。
    1. 存在しない場合は、新しい tmux セッションを開始します。
    2. 実行中(単一)tmuxインスタンスに接続する
    3. 複数のtmuxセッションのうちどのセッションに接続するかを尋ねるメッセージを表示する
  5. 分離すると、SSHセッションが終了する前にxpraから分離されたtmux-x-attachに戻ります。
  6. tmuxが内部的に分離されている場合は、ターミナルをクリーンアップしようとします(tput init)。ウィム

.bashrcから

  tmux-x-attach() {
     ps -f -u $USER | grep -v grep | grep -q 'xpra start' || xpra start :9
     xpra attach :9 --opengl=no > /tmp/xpra-attach.log 2>&1 &
     DISPLAY=:9 tmux-attach "$@"
     xpra detach :9
  }

  tmux-attach() {
     case $(tmux list-sessions 2>/dev/null | wc -l) in
        0) tmux ;;
        1) tmux attach ;;
        *)
           tmux list-sessions 
           read -n 1 -p "Select command: " N < /dev/tty > /dev/tty;
           tmux attach -t $N
           ;;
     esac
  }
  tmux-ssh() { ssh "$@" -A -X -t 'PS1=tmux-ssh- ; . ~/.bashrc ; tmux-x-attach'; tput init; }

関連情報