Dalam sesi tmux, tidak dapat terhubung ke server X setelah melakukan ssh'ing

10

Di tempat kerja, saya memiliki desktop dengan monitor dan beberapa sesi tmux yang sedang berjalan. Di rumah, saya sering ssh ke desktop itu dan memasuki sesi tmux saya yang sedang berjalan. Ketika saya ssh dari rumah, saya tidak ingin menggunakan X11, jadi saya tidak menggunakan -Xbendera. Ketika saya kembali bekerja (setelah ssh'ing dari rumah) dan menggunakan sesi tmux di desktop, saya tidak bisa lagi melakukan apa pun yang akan menelurkan GUI. Saya tidak bisa membuka file di evince. Ketika saya mencoba menggunakan matplotlib, saya mendapat : cannot connect to X serverpesan.

Setelah melakukan ssh'ing dan membuka sesi tmux yang ada dari rumah, bagaimana nantinya saya dapat melampirkan kembali kemampuan untuk membuka hal-hal GUI di desktop?

Ssh'ing dari rumah tampaknya membuat sesi tmux lupa bahwa ia dapat menelurkan barang-barang GUI.

EDIT:

chrisdembia
sumber
Agak bingung. Apakah Anda menggunakan -Xbendera sekarang atau tidak? Anda hanya dapat melakukan hal-hal X11 melalui SSH jika itu diatur.
Anko
Maaf bila membingungkan. Saya tidak pernah menggunakan flag -X, di mana saja. Saya tidak bermaksud melakukan hal-hal X11 melalui SSH. Saya hanya bermaksud menggunakan X11 di desktop saya, di mana sesi tmux benar-benar hidup. Saya akan memperbarui pertanyaan awal.
chrisdembia

Jawaban:

4

Yang perlu saya lakukan adalah mengatur variabel lingkungan DISPLAY ke: 0,0. Saya pikir masalahnya adalah saya menggunakan shell ikan, dan saya perlu menggunakan flag -x untuk mengatur ketika melakukan ini:

set -x DISPLAY :0.0
chrisdembia
sumber
3
Perhatikan bahwa nilai yang tepat untuk DISPLAYmungkin berbeda dari :0.0. Cara cepat untuk mengetahuinya adalah dengan membuat jendela tmux baru dan di echo $DISPLAYsana.
j08lue
1
Hanya memperluas komentar dari @ j08lue; dalam kasus saya echo $DISPLAYkembali localhost:10.0dan berlari set DISPLAY localhost:0.0melakukan trik.
IsaacS
1
Apakah ada yang tahu versi yang bashsetara, atau lintas-shell? set -xhanya meningkatkan bertele-tele untuk saya di bash. @IsaacS, apakah Anda harus set DISPLAY localhost:10.0melakukannya atau tidak localhost:0.0bekerja untuk Anda?
es
4
Pada bash, Anda harus dapat menggunakannya export DISPLAY=:0.0.
chrisdembia
1
Saya tidak suka solusi ini, karena saya harus melakukannya untuk setiap jendela baru selama sisa sesi (yang berlangsung berminggu-minggu untuk saya). Dan itu terjadi bahkan ketika saya kembali ke sistem X11 utama saya membuat windows baru. Bagaimana kita bisa mendapatkan tmux untuk berhenti unsetting $DISPLAY?
nealmcb
4

Saya memiliki masalah yang sama. Saya biasanya menggunakan tmuxsebagai bagian dari lingkungan desktop multi-monitor X11, dan terkadang ssh in dari chromebook, yang tidak mendukung X11 atau set $DISPLAY. Jawaban oleh @chrisdembia bekerja, tetapi membutuhkan perubahan DISPLAYdi setiap jendela baru untuk sisa sesi tmux, yang merupakan rasa sakit.

Solusi permanen adalah dengan menghapus DISPLAYdari update-environmentvariabel tmux dalam pengaturan tmux. Anda dapat melihat nilai Anda saat ini dengan perintah ini:

tmux show-options -g update-environment

Untuk menghapusnya, saya menambahkan baris ini ke ~/.tmux.conffile saya , termasuk semuanya kecuali DISPLAY:

set-option -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"

Ini dijelaskan lebih lanjut di Reset variabel shell DISPLAY di sesi tmux over ssh , yang menjelaskan mengapa DISPLAYada secara default, untuk kasus penggunaan umum yang berbeda.

nealmcb
sumber