tmuxと画面


262

GNU Screenの使用に取り掛かろうとしていますが、時々、tmuxがより良い代替手段として言及されるのを耳にします。異なるウィンドウでのアクティビティ監視など、スクリーンが提供するすべての機能の代替物を本当に提供していますか?それぞれの長所と短所は何ですか?



2
画面でscreen -S automate_me -X stuff 'command'$(echo -ne '\015')は、tmuxでは実行できないコマンドを介して、接続されたセッションにコマンドを送信できます。virtualbox ISO / imageをテストしていて、リモートでいくつかのコマンドをすばやく実行する必要がある場合に非常に便利です。たとえば、Virtualbox画面でスクリプトをすばやくデバッグするためにVimコマンドで使用しています。tmuxの以前のバージョンでは、tmuxがクラッシュしたのに対して、画面はより多くのテキストの受け渡しを迅速に処理することがわかりました。また、画面はUTF-8などを処理するために設定を必要としません。tmuxは必要です。
デザ

tmux取り扱いhistoryを適切?
ベロエ

回答:


170

私が好む(主要な)理由のいくつかtmuxの上にscreen

  • ステータスバーの使用ははるかに簡単です。現在のウィンドウ、アクティビティのあるウィンドウなどにさまざまなテキスト/スタイルを簡単に設定でき、指定した間隔(デフォルトでは15秒)で実行できるシェルコマンドなど、ステータスバーの左右に物を置くことができます。
  • 内部tmuxで実行できるほとんどすべてのコマンドは、からシェルから実行できますtmux command [args]。これにより、非常に簡単にスクリプト化できるようになり、複雑なコマンドを簡単に実行できるようになります。
  • はるかに正確な自動ウィンドウ名の変更。一方では、screenコマンドの最初の単語に基づいて、タイトルを設定し、シェルウィンドウでも、それを行うために、シェルの設定が必要になり、tmuxプロセスが実際には各ウィンドウで実行しているかを追跡し、それに応じてタイトルを更新します。このようにして、任意のシェルおよびゼロ構成で動的に名前を変更できます。たとえば、Z Shellを実行しているとしましょう。ウィンドウの名前は「zsh」になります。ここで、設定ファイルを編集したいので、と入力しsudo emacs /etc/somefileます。sudoがパスワードを要求している間、ウィンドウの名前は「sudo」になりますが、一度それを実行してsudo起動するemacsと、タイトルは「emacs」になります。完了したら、終了しますemacs、タイトルは「zsh」に戻ります。これはウィンドウを追跡するのに非常に役立ちます。また、特定の状況で、特に別のウィンドウで長時間実行されるプロセスがあり、ときどき入力を要求する場合などに役立ちますdialog。その場合、ウィンドウ名は「ダイアログ」に変更されるため、そのウィンドウに切り替えて何かを行う必要があることがわかります。
  • より良いセッション処理(IMHO)。セッション内でセッションを使用すると、さらに多くのことができますtmux。簡単に切り替えたり、名前を変更したりできます。また、セッション間でウィンドウを移動および共有できます。また、各ユーザーが自分のセッションを制御し、クライアントが接続するサーバーを持っている、異なるモデルもあります。これの欠点は、サーバーがクラッシュすると、すべてが失われることです。ただし、サーバーがクラッシュすることはありません。
  • tmuxより積極的に開発されているようです。更新はかなり頻繁にあり、このFAQに従ってバグレポートまたは機能リクエストを提出し、数日以内に回答を得ることができます

これらはすぐに思い浮かぶ主要なものです。他にもささいなことがありますが、忘れてしまったことは確かです。tmuxただし、試してみる価値はあります。


151
tmux開発は新しいため、より活発です。GNU Screenはほぼ25年前なので、ほとんどのバグを修正しました。
有料のオタク

8
有料のオタクのコメントは、最後のポイントの非常に重要な資格です。そして、前述の2番目の点は、より具体的に説明できる場合を除き、画面にも適用されるため、実際には違いではありません。
jw013


11
非常に豊かな声明だ@apaidnerd:savannah.gnu.org/bugs/...
BłażejMichalik

93

セッションは、後で切り離して再接続できるウィンドウのコレクションです。ウィンドウには、1つ以上のペインが含まれる場合があります。構成については、こちらこちらをご覧ください。)

tmux

  • 長所
    • IDEのようなキーを他のペインに送信できます
    • 簡単なキーバインド-適切な設定で、VimまたはScreenでくつろいでいただけます
    • 組み込みのVim-ishおよびEmacs-ishバインディング
    • 優れたレイアウト管理、タイルウィンドウマネージャーによく似ています
    • Unicodeは最新の端末で動作するようです
    • 修正された端末の問題 TERM=tmux
  • 短所
    • 遅い-理由はわかりませんが、キーストロークが遅いようです
    • 多重化により、セッション全体の幅と高さが最小の接続端末に強制されます
    • Mac OS Xで複数回クラッシュし、セッション全体が失われた
    • アップグレード後にLinuxで失敗しました。古いセッションに再接続できませんでした
    • コマンドキーストロークをときどき見逃します- ^A ^[コピーモードを数回試行します
    • ペインをあるウィンドウから別のウィンドウに移動できないjoin-paneコマンドで修正済み
    • 端末の幅を変更した後、行のアンラップ(または「リフロー」または「リラップ」)なし(ウィンドウのサイズ変更)

GNUスクリーン

  • 長所
    • 非常に安定(v1.0は1987年)
    • 修正された端末の問題 TERM=screen
    • 組み込みのEmacs風のバインディング
    • 水平ペインの移動と制御が簡単
    • 多重化する場合、接続された端末はペインのサイズを変更できます
  • 短所
    • パッチなしの垂直分割なし(Ubuntuを除く)
    • デタッチするとペイン分割が失われます
    • Unicodeを機能させるには、少しの巧妙さと決意が必要です
    • クレイジーステータスラインの構成

遅延キーストロークは、Escを押したときのみですか?tmuxには遅延があり、xtermシーケンスを入力するのか、それともEscのみを入力するのかを待機し、vimと組み合わせた場合、かなり遅延しているように見えます。50のような低い値にエスケープ時間を設定
イーブイ

^A ^[時々うまくいかないと言うのも面白いです。画面にも同じ問題がありますが、tmuxはありません!そして、私はあなたがペインを動かすことができると信じていますjoin-pane
イーブイ

私は、画面がかなり多くのメモリを使用することを発見しましたが、これは欠点として含まれている可能性があります。
パラドロイド

6
ええと、tmuxとにかくvim、いくつかの場合(つまり、私の場合)、どこにも投稿されたソリューションが機能しません。<C-Left>および<C-Right>を使用できない場合は迷惑ですvim
よ」

3
No vertical splits without patch (except on Ubuntu)私はそれが本当だとは思わない。私は数年前からスクリーンを使用していますが、DebianとFedoraで水平または垂直に分割する問題はありませんでした。Termuxを搭載したAndroidでも、まるで魔法のように機能します。
フォリビン

11

スクリーンの長所:LinuxおよびSolarisですぐに使用できます。プラットフォーム間を行き来する必要がある場合、メンタルコンテキストを切り替えないことをお勧めします。

どんなプラットフォームでもtmuxをコンパイルできると確信していますが、スクリーンを利用するのに十分なアクセス権しか持っていないこともありますが、実際のシステム管理者は、絶対に必要ではないソフトウェアを追加したくありません。


10

私は約2日間tmuxを使用しているので、迷惑なユースケースをヒットすることによって、それに対する私の自由な熱意はまだ和らいでいない。あるプログラムから別のプログラムに移行するという通常の成長する苦痛を経験しながら、私はいくつかの肯定的な機能に感銘を受けましたが、画面に戻ることはないと信じている機能はコピーアンドペーストモードのユーティリティです。画面では、コピーモードに入り、バッファをスクロールバックして、別のウィンドウに移動することはできません。tmuxでは、コピーモードで複数のウィンドウを同時に表示し、バッファーを異なる位置にスクロールして戻すことができます。また、複数のコピーバッファがあります。また、fFtTカーソルの動きを取得するためにソースにパッチを当てる必要はありません。


8

画面で簡単に取得できないtmuxから取得するものは次のとおりです。

  1. 垂直ペイン分割を行います
  2. 多重化。リモートとローカルのペアリングに使用します。


以前の投稿で言及したように、画面には垂直ペインが分割されています(明らかにUbuntuなしのパッチが必要です)。また、多重化は正常に機能し、長年にわたって使用されています。
エンタングルドループ

垂直分割はscreen、2014年にリリースされた4.2以降メインラインにあります。多くのディストリビューションは、非常に古いバージョン、特にAppleを出荷しています。
ニールフルツ

2
両方の点が間違っています。
フォービン

2
答えは2018年に正しくありません
アレックイスミン

5

シリアルポートに接続するために同等のハイパーターミナルが必要な場合を除き、1つを除くすべてのユースケースでGNU Screentmuxに置き換えました。Aaron Toponceが記事「GNU Screenでシリアルヌルモデムに接続する」で述べたように、tmux FAQは次のように述べています。

画面には組み込みのシリアルおよびtelnetサポートがあります。これは肥大化しており、tmuxに追加される可能性は低いです。

私の典型的なtmuxのユースケースは、tmuxinatorと組み合わせてマルチペインおよびマルチウィンドウ開発セッションを作成することですtmuxを学びたい場合は、ブライアンP.ホーガンの本tmux:Productive Mouse-Free Developmentを入手することをお勧めします。


cu 別のシステムを呼び出すことを知っていますか?シリアルよりTTY Simplier 画面が、軽くて便利!
F.ハウリ

2

私は長い間Screenのヘビーユーザーでしたが、2002年に修正したバージョンを使用しています。主に、ウィンドウの「次/前」ナビゲーション順序を新しい順序と一致させたいと思ったためです。i3Ionなどのタイルウィンドウマネージャーに似たウィンドウが作成されました。標準の画面の動作は、「次」および「前」がウィンドウ番号で移動するため、通常「新しい」ウィンドウ(利用可能な最小の番号を取得)は「次」ウィンドウ以外の場所に配置されます-そうしないと混乱します数字を覚えておいてください。私の好む振る舞いは、2010年にnew-windowコマンドへのフラグとして、また2012年にrenumber-windowsオプションとしてTmuxに実装されました。。ドキュメントの追加などを含め、可能な限り受け入れようとした私のスクリーンパッチは、2002年7月にスクリーンリストに関する議論を生成しませんでした(「screen@informatik.uni-erlangen.de」はできません。アーカイブを見つけます)。実際、1年後にもう一度送ったとしても、それは認められませんでした。

2002年以降、新しいバージョンのScreenに適用するために、パッチを数回「リベース」しています。しかし、バージョン4.3(2015)に到達したとき、画面の使用の1つを壊した文書化されていない変更に気づきました-つまり、その「もの」が環境変数を補間するようになりました。私はその機能を必要としなかったので、引数を「もの」に簡単にエスケープする方法がわからなかったため(ドル記号を含むテキストを送信できるように)、バージョン4.0(2004年以降)を使用し続けました。

現在のEmacs領域の内容を特定のウィンドウ番号に送信するEmacs関数で、Screenの「もの」(Tmuxでは「送信キー」)を使用します。そうすることで、スクリプト言語でコードを書いているときにインタープリターを開き、インタープリターウィンドウに特別な番号を付け、このEmacsバインディングを使用してエディターウィンドウからインタープリターウィンドウにコードの行を直接送信できます。それはハックですが、標準のキーストロークを使用してスクリーンウィンドウでインタプリタと対話することもできるため、純粋なEmacsソリューションよりも優れています。GUI IDEに少し似ていますが、マウスを使用したり、点滅するカーソルを見つめたりする必要はありません。

パッチに実装したもう1つの機能は、ウィンドウを「マーク」し、マークしたウィンドウを現在のウィンドウの「次」に再配置する機能です。私にとって、これはウィンドウの番号を付け直すよりもはるかに自然な方法です。これは、コピー/貼り付けのパラダイム、つまり「ドラッグアンドドロップ」のようなものです。(最近、i3でもこれを行う方法を見つけました。)

Tmuxでも同じことを行うことができるはずです。たとえば、2015年の時点では、ペインを「マーク」する機能があります。あるいは、ステートフルシェルスクリプトを使用して、より基本的なソリューションを作成することもできます。短いスクリプトとキーバインドを実装して「マークされたペイン」メソッドを試してみましたが、数回機能しましたが、Tmuxが「[lost server]」でクラッシュしました。それから、複雑なことをしようとせずにTmuxがクラッシュすることがわかりました。どうやらそれは、一部のユーザーのためにクラッシュされているため、少なくとも数年。サーバーがクラッシュしたり、CPUの100%を使用し始めて応答しなくなることがあります。Screenがこれらのいずれかを実行するのを見たことはありません。

理論的には、Tmuxはいくつかの点でScreenよりも優れています。スクリプト性がはるかに優れています。つまり、現在のセッションのウィンドウのリストをコマンドラインから照会するなど、Screenでは不可能なことを実行できます。たとえば、2015年にScreen は「タイトルでウィンドウを並べ替える」コマンドを追加しました。このような特殊なコマンドがいつ役立つかはわかりませんが、これとより実用的なバリエーション(CPU使用率でウィンドウを並べ替えるなど)は、Tmuxのシェルスクリプトから比較的簡単に実行できます。私には、少なくともCコードを変更しない限り、Screenでこれほど創造的なことを行うのは難しいように思えます。

他のポスターが言及したように、Tmuxには単一サーバーモデルがあり、これは特にサーバーがクラッシュした場合の主な欠点と考えられます。「セッション」ごとに個別のソケットを指定することにより、この問題を回避することができます。それでも、私はScreenのセッションごとに1サーバーあたりのデフォルトを好みます。

2002年のScreenコードの操作は、教育的で楽しいものでした。奇妙なことに、すべての追加機能について、TmuxにはScreenよりもコード行が約25%少ない(30k対40k)。Tmuxは多くのツリーとリストのデータ構造を使用していることに気付きました。画面は配列を好むようでした。

私が理解しているように、Unixターミナルインターフェイスは非常に安定しているため、基盤となるオペレーティングシステムの変更に対応するためにScreenまたはTmuxコードを使用する必要はほとんどありません。これらのプログラムには、実際にはWebブラウザーやWebサーバー、さらにはシェルのようなセキュリティ更新プログラムはありません。2004年に最後に更新されたScreenのカスタムバージョンの実行に問題はありません(Systemdがソケットを削除しないようにいくつかの構成ファイルを追加する必要がある場合を除く); これらのファイルは通常、いずれにしても配布パッケージの一部です)。おそらく、クラッシュを開始する前からTmuxバージョンを実行することで、Tmuxで発生した問題を回避することができました。もちろん、十分なユーザーがこれを行うと、これらのプログラムの最新の公式バージョンでバグを探す専門家が少なくなるため、新規ユーザーにはあまり適していません。ただし、私にとって不安定な製品(最新のTmux)や、必要な特定の機能を備えていない製品(標準の画面)に切り替えることをやる気にさせることは困難です。

これはOPの質問に対する簡単な答えを提供するものではないことは知っていますが、私の視点が役立ったことを願っています。


2

tmuxのメンテナーの1人であるThomas Adamも、プロジェクトのメンテナーとしてリストされていますが、screentmuxのコードにしか触れていません。これは、画面上のtmuxの大きなプロです。


1

画面の可用性はその強さだと思いますが、そのウィンドウシステムはのように簡単に処理できません。私は現在、ほとんどの場合を使用しているため、スクリーンウィンドウの代わりにターミナルタブがたくさんあると言わなければなりません。

@Jed Schneider:Ctrl+ A|(垂直バー)で垂直ペインを分割できます 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.