2012-01-27 16 views
20

मैंने हाल ही में स्क्रीन का उपयोग tmux (मैकपोर्ट के माध्यम से प्राप्त) से स्विच करने के लिए स्विच किया है, क्योंकि मुझे सुविधा सेट अधिक पसंद है। हालांकि, मुझे लगता है कि मैं एक वैकल्पिक स्थान से पुनः कनेक्ट करने के लिए tmux प्राप्त नहीं कर सकता, जैसे कि मैं स्क्रीन कर सकता हूं।tmux फिर से अटैचिंग

मेरे मैक पर घर पर, मैं iTerm2 खोलूंगा, मेरा डिफ़ॉल्ट खोल zsh है, और मैं tmux के साथ एक tmux सत्र शुरू करूंगा। मैं अपने सभी थूक सेट अप करता हूं, उचित सर्वरों में ssh'd, आदि, और थोड़ी देर के लिए काम करते हैं। काम पर जाने का समय <C-a> d - टीएमयूक्स अलग हो जाता है।

मैं काम करने के लिए मिलता हूं, जहां मैं एक विंडोज एक्सपी मशीन का उपयोग करता हूं। मैं घर पर वापस मेरी मैक में पोटीन, ssh ऊपर आग, एक tmux attach प्रयास करते हैं, और एक त्रुटि संदेश मिलता है:

no sessions

मैं निर्धारित करने के लिए क्यों यह होगा नहीं कर पा रहे। मैं इसमें खोदने से डरता नहीं हूं, लेकिन यह भी नहीं जानता कि कहां से शुरू करना है। विचार?

पीएस मैंने पहले ही .tmux.conf फ़ाइल को हटा दिया है, इसलिए यह डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग कर रहा है।

उत्तर

19

tmux टीएमपीडीआईआर पर्यावरण चर द्वारा निर्दिष्ट निर्देशिका के तहत अपनी सर्वर सॉकेट को निर्देशिका में संग्रहीत करता है।

अपने जीयूआई सत्र में आप शायद एक टीएमपीडीआईआर के साथ समाप्त हो जाते हैं जो /var (उदा। /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/) के नीचे कहीं इंगित करता है।

जब आप SSH के माध्यम से प्रवेश किया हुआ है, तो आप शायद एक TMPDIR सेट के बिना खत्म हो, तो tmux इसके सॉकेट के लिए /tmp/ के तहत लग रहा है।

10.6 सिस्टम पर, यहां मेरा टीएमपीडीआईआर है zsh/& # xfeff; टर्मिनल, और zsh साथ/SSH:

% echo local: ${TMPDIR-unset}; ssh localhost 'echo remote: ${TMPDIR-unset}' 
local: /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/ 
remote: unset 

आप मूल्य तुम TMPDIR के लिए उपयोग करने की आवश्यकता को जानते हैं, आप इसे जब (संलग्न या सत्र के बाहर कुछ अन्य tmux आदेश चलाकर निर्दिष्ट कर सकते हैं खुद):

TMPDIR=/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/ tmux attach 

आप निर्देशिका अपने GUI सत्र आप (सिंटेक्स zsh के लिए विशिष्ट है कुछ इस तरह से यह पता लगाने के लिए सक्षम हो सकता है उपयोग कर रहा था पता नहीं है, यह यह खोज -Tmp- नाम के एक निर्देशिका है कि वर्तमान उपयोगकर्ता के स्वामित्व में है) के लिए /var/folders/ के तहत:

echo /var/folders/**/*/-Tmp-(U/) 

भविष्य में समस्याओं से बचने के लिए, आप अपने सर्वर शुरू करने से पहले सेट नहीं TMPDIR करना चाह सकते हैं (या कुछ और के लिए सेट है कि आप कर सकते हैं अधिक आसानी से भविष्यवाणी)।

+6

मेरे टीएमयूक्स सत्र शुरू करने से पहले 'अनसेट टीएमपीडीआईआर' चलाने से समस्या हल हो गई। विशाल प्रोप – kenny

+2

यदि आप bashdir को bash में खोजने का प्रयास कर रहे हैं, तो 'ढूंढें/var/फ़ोल्डर्स-प्रकार डी -नाम" -Tmp- "-user $ (whoami) 2>/dev/null' यह/निर्देशिका के लिए var/फ़ोल्डरों (डी) नाम के साथ "-Tmp-" स्वामित्व। चूंकि/var/फ़ोल्डर्स में बहुत सी निर्देशिकाएं होंगी जिन्हें अनुमति अस्वीकार कर दी जाएगी, stderr को बिट बाल्टी पर भी रीडायरेक्ट किया जाता है। संपादित करें: समय से पहले दर्ज – myeeshen

+0

'TMPDIR =/var/फ़ोल्डर्स/mV/mVip4IQ4EXOriTiLJmeSuk +++ टीसी/-Tmp-/tmux attach' मेरे लिए काम नहीं किया था, लेकिन' TMUX_TMPDIR =/var/फ़ोल्डर्स/mV/mVip4IQ4EXOriTiLJmeSuk ++ + टीसी/-टीएमपी-/tmux संलग्न 'नीचे दिए गए lsof कमांड के साथ मेरे TMPDIR के लिए वैध मान के साथ संलग्न करें। – socketwiz

6

lsof सूचियों खुला सॉकेट फ़ाइलों के -U विकल्प है, तो lsof -U | grep '^tmux' द्वारा tmux उपयोग में सॉकेट के सभी सूची जाएगा। यदि आप उसी उपयोगकर्ता के रूप में लॉग इन नहीं हैं जिसने tmux शुरू किया है, तो आपको sudo का उपयोग करने की आवश्यकता होगी।

प्रत्येक पंक्ति का अंतिम स्तंभ फ़ाइल का नाम है।जिन फ़ाइलों की आप परवाह करते हैं वे / से शुरू होते हैं।

पंक्तियों आप देख रहे हैं कुछ इस तरह दिखेगा:

tmux 1234 username 6u unix 0xffffffabcd123456 0t0 /private/var/folders/M8/M8tFwolmH08fOvJ+-35VI++++TM/-Tmp-/tmux-502/default 
tmux 56789 username 6u unix 0xffffff123456789a 0t0 /private/tmp/tmux-502/default 
31

मेरे मामले में, जाहिरा तौर पर अस्थायी फ़ोल्डर साफ किया गया था। संकेत 10 मजबूर सॉकेट से बनाना tmux भेजने:

मैं अंत में समाधान मिल गया:
This blog post मुझे मेरे "खो" सत्र की वसूली में मदद की।

$ killall -10 tmux 
+1

मुझे आज भी यही समस्या थी, और उसी ब्लॉग पर आया! यह काम करता है, लेकिन मैं उलझन में था * क्यों * यह काम करता है। यह पता चला है कि सिग्नल 10 एक * उपयोगकर्ता परिभाषित सिग्नल * है, और [tmux का कहना है कि यह "SIGUSR1 पर सर्वर सॉकेट को फिर से बनाएगा"] (https://github.com/ThomasAdam/tmux/blob/814e40522cb611895e84fc2aaf58d5d0ca9ba348/CHANGES#L552)। – DaoWen

+1

यह मेरे लिए काम करता था, लेकिन * नहीं * जब मेरे पास दूसरा tmux सत्र खुला था: मुझे लगता है कि सॉकेट का अर्थ है कि मूल सत्र उन्हें पुन: उत्पन्न नहीं कर सका। – spookypeanut

+0

** मूल निर्देशिका ** सॉकेट से पहले पुनर्निर्मित नहीं है, आपको हत्या संकेत भेजने से पहले इसे करना होगा। – bufh

1

मैं lsof सुझाव पर एक बदलाव है कि मैं कुछ सफलता उपयोग कर रहा है "की वसूली करने के लिए" TMPDIR चर जो एक के आसपास काम कर मदद कर सकता है: उसके बाद मैं अपने सत्र खोने के बिना फिर से tmux चला सकते हैं परेशानियों का गुच्छा। मुझे लगता है कि लाभ यह है कि lsof सही मूल्य को पार करने के लिए रिटर्न और आसान (कुछ बिंदु पर ऑफ-मौके पर कुछ अटैचिकल वर्ण, लेकिन अभी भी वैध, कभी आउटपुट) के बारे में थोड़ा और सटीक हो सकता है।

एक त्वरित, एक लाइनर है:

#!/bin/bash 

if [[ -z "${TMPDIR}" ]]; then 
    while read line; do 
     case $line in 
     n*) line="${line#n}" 
      export TMPDIR="${line%%/tmux-$(id -u)/*}" 
      ;; 
     esac; 
    done < <(lsof -Fn -d6 -aUc tmux) 
else 
    echo ">> \$TMPDIR already defined: $TMPDIR" 1>&2 
fi 

:

$ lsof -Fn -d6 -aUc tmux | grep ^n | cut -c2- 
/private/var/folders/_l/f_n8blps05xfnkw6fs3dcn_80000gp/T/tmux-502/default 

मैं निम्न स्क्रिप्ट का उपयोग (यह भी ~/.bash_profile या अन्य उपयुक्त जगह मुझे लगता है में एक समारोह हो सकता है) https://gist.github.com/jps3/769d50a6a7611949473b

संबंधित मुद्दे