tmux vs layar

262

Saya akan kembali menggunakan Layar GNU , tetapi saya sering mendengar orang menyebut tmux sebagai alternatif yang lebih baik. Apakah ini benar-benar menawarkan alternatif untuk semua fitur yang ditawarkan Layar , seperti pemantauan aktivitas di jendela yang berbeda, dll.? Apa pro dan kontra dari masing-masing?

Alison R.
sumber
7
Juga didiskusikan di unix.stackexchange.com/questions/549/tmux-vs-gnu-screen
Lloyd Dewolf
2
Di layar Anda dapat mengirim perintah ke sesi terlampir melalui screen -S automate_me -X stuff 'command'$(echo -ne '\015')Anda tidak bisa di tmux. Cukup berguna jika Anda menguji ISO / gambar virtualbox dan perlu melakukan beberapa perintah dari jarak jauh dengan cepat. Misalnya saya memilikinya dalam perintah Vim untuk dengan cepat men-debug skrip di layar Virtualbox. Dalam versi tmux sebelumnya saya menemukan bahwa layar menangani lebih banyak teks yang lewat dengan cepat sedangkan tmux macet. Juga layar tidak memerlukan konfigurasi apa pun untuk menangani UTF-8 dll. Tmux tidak.
dezza
Apakah tmuxmenangani historydengan benar?
Beroe

Jawaban:

170

Beberapa alasan (utama) yang saya sukai tmuxlebih dari screen:

  • Bilah status lebih mudah digunakan. Anda dapat dengan mudah mengatur berbagai teks / gaya untuk jendela saat ini, jendela dengan aktivitas, dll. Dan Anda dapat meletakkan berbagai hal di kiri dan kanan bilah status, termasuk perintah shell yang dapat dijalankan pada interval yang ditentukan (standar 15an).
  • Hampir semua perintah yang dapat Anda jalankan di dalamnya tmuxdapat dijalankan dari shell tmux command [args]. Ini membuatnya sangat mudah skrip, serta membuatnya mudah untuk melakukan perintah yang kompleks.
  • Mengubah nama jendela otomatis jauh lebih akurat. Sementara screenmengatur judul berdasarkan kata pertama dari perintah, dan memerlukan konfigurasi shell untuk melakukan hal itu bahkan di jendela shell, tmuxmelacak proses apa yang sebenarnya berjalan di setiap jendela, dan memperbarui judul yang sesuai. Dengan cara ini Anda mendapatkan penamaan dinamis dengan shell dan konfigurasi nol. Misalnya: Katakanlah Anda menjalankan Z Shell; nama jendela adalah "zsh". Sekarang katakanlah Anda ingin mengedit beberapa file konfigurasi, jadi Anda mengetik sudo emacs /etc/somefile. Saat sudo meminta kata sandi Anda, nama jendela itu adalah "sudo", tetapi begitu Anda selesai melakukannya dan sudodiluncurkan emacs, judulnya adalah "emacs". Setelah semuanya selesai dan Anda keluaremacs, judul akan berubah kembali menjadi "zsh". Ini sangat berguna untuk melacak windows, dan itu juga bisa sangat berguna dalam situasi tertentu, seperti jika Anda memiliki beberapa proses yang berjalan lama di jendela lain yang kadang-kadang meminta Anda untuk menggunakan input dialog; nama jendela akan berubah menjadi "dialog" ketika itu terjadi, jadi Anda akan tahu Anda harus beralih ke jendela itu dan melakukan sesuatu.
  • Penanganan sesi yang lebih baik (IMHO). Anda dapat melakukan lebih banyak dengan sesi di dalam tmuxdirinya sendiri. Anda dapat dengan mudah beralih, mengganti nama, dll. Dan Anda dapat memindahkan dan berbagi jendela di antara sesi. Ini juga memiliki model yang berbeda, di mana setiap pengguna memiliki server yang mengontrol / nya sesi dan yang terhubung ke klien. Kelemahan dari ini adalah bahwa jika server crash, Anda kehilangan segalanya; Namun saya tidak pernah mengalami crash server.
  • tmuxtampaknya lebih aktif dikembangkan. Ada pembaruan yang cukup sering, dan Anda dapat mengajukan laporan bug atau permintaan fitur sesuai dengan FAQ ini dan mendapatkan jawaban dalam beberapa hari.

Itu hanya hal-hal utama yang langsung terlintas dalam pikiran. Ada hal-hal kecil lainnya juga, dan saya yakin saya lupa beberapa hal. Pasti layak untuk tmuxdicoba.

qmega
sumber
151
Pengembangan tmux lebih aktif karena ini baru . Layar GNU hampir 25 tahun , jadi mereka telah memperbaiki sebagian besar bug.
kutu buku yang dibayar
8
komentar nerd berbayar adalah kualifikasi yang sangat penting dari poin terakhir Anda. Dan poin kedua sebagaimana dinyatakan tidak benar-benar perbedaan karena berlaku untuk layar juga kecuali Anda bisa lebih spesifik.
jw013
11
@apaidnerd itu pernyataan yang sangat kaya: savannah.gnu.org/bugs/…
Błażej Michalik
93

( Sesi adalah kumpulan jendela yang dapat dilepas dan dipasang kembali nanti. Windows dapat berisi satu atau beberapa panel . Misalnya konfigurasi, periksa di sini dan di sini .)

tmux

  • Pro
    • Dapat mengirim kunci ke panel lain, seperti IDE
    • Pengikat kunci yang mudah - dengan konfigurasi yang tepat, Anda akan merasa seperti di rumah sendiri dari Vim atau Layar
    • Binding Vim-ish dan Emacs-ish terpasang di dalam
    • Manajemen tata letak yang baik, sangat mirip dengan manajer jendela ubin
    • Unicode tampaknya Hanya Bekerja dengan terminal modern
    • Beberapa masalah terminal telah diperbaiki TERM=tmux
  • Cons
    • Lambat - tidak yakin mengapa, tetapi penekanan tombol sepertinya lambat. Tidak ada lagi masalah dengan kelambatan
    • Multiplexing memaksa lebar dan tinggi seluruh sesi ke terminal terlampir terkecil
    • Telah jatuh beberapa kali di Mac OS X, kehilangan seluruh sesi
    • Telah gagal di Linux setelah peningkatan, di mana saya tidak dapat menyambung kembali ke sesi lama saya
    • Kehilangan penekanan tombol perintah sesekali - ^A ^[membutuhkan beberapa percobaan untuk mode penyalinan
    • Tidak dapat memindahkan panel dari satu jendela ke jendela lainnya. Tetap dengan join-paneperintah
    • Tidak ada garis yang terbuka (atau "reflow" atau "rewrap") setelah perubahan lebar terminal (ukuran jendela)

Layar GNU

  • Pro
    • Sangat stabil (v1.0 pada 1987)
    • Beberapa masalah terminal telah diperbaiki TERM=screen
    • Binding Emacs-ish built in
    • Mudah untuk bergerak dan mengontrol panel horizontal
    • Saat multiplexing, terminal apa pun yang terpasang dapat mengubah ukuran panel
  • Cons
    • Tidak ada pemisahan vertikal tanpa tambalan (kecuali pada Ubuntu)
    • Perpecahan panel hilang saat melepaskan
    • Mendapatkan Unicode untuk bekerja membutuhkan sedikit kemahiran dan tekad
    • Konfigurasi garis status gila
kutu buku yang dibayar
sumber
Apakah penekanan tombol hanya saat menekan Esc? tmux memiliki penundaan di mana ia menunggu untuk melihat apakah Anda memasukkan urutan xterm atau hanya Esc sendirian, dan dikombinasikan dengan vim, sepertinya cukup lambat. Atur waktu pelarian ke nilai yang lebih rendah seperti 50.
Eevee
Lucu juga, Anda bilang ^A ^[kadang-kadang tidak berfungsi; Saya memiliki masalah yang sama dengan layar, tetapi tidak pernah tmux! Dan saya yakin Anda bisa menggerakkan panel join-pane.
Eevee
Saya menemukan bahwa layar menggunakan lebih banyak memori, yang dapat dimasukkan sebagai kerugian.
paradroid
6
Yah, tmuxmenyebalkan dengan vim, dalam beberapa kasus (yaitu milik saya), tidak ada solusi yang pernah diposting di mana pun bekerja, dan bahkan orang yang menghabiskan waktu untuk menyelesaikan masalah saya tidak mampu. Itu menjengkelkan ketika Anda tidak bisa menggunakan <C-Left>dan <C-Right>masuk vim.
yo '
3
No vertical splits without patch (except on Ubuntu)Saya pikir itu tidak benar. Saya telah menggunakan layar selama beberapa tahun sekarang dan saya tidak pernah mengalami masalah memecah secara horizontal atau vertikal pada Debian dan Fedora. Bahkan di Android dengan Termux bekerja seperti pesona.
Forivin
12

Pro untuk layar: ini tersedia cukup banyak di luar kotak di Linux dan Solaris. Ketika Anda harus beralih antar platform, alangkah baiknya untuk tidak memiliki saklar konteks mental.

Saya yakin Anda bisa mendapatkan tmux dikompilasi pada platform apa pun, tetapi kadang-kadang Anda hanya memiliki akses yang cukup untuk menggunakan layar, tetapi admin sistem yang sebenarnya tidak benar-benar ingin menambahkan perangkat lunak apa pun yang tidak mutlak diperlukan.

Justin
sumber
10

Saya telah menggunakan tmux selama sekitar 2 hari sekarang, jadi antusiasme saya yang tak terkendali untuk itu belum ditempa dengan memukul penggunaan kasus yang mengganggu. Saat melewati masa transisi yang sulit dari satu program ke program lainnya, saya dikejutkan oleh beberapa fitur positif, tetapi fitur yang membuat saya yakin saya tidak akan pernah kembali ke layar adalah kegunaan mode copy-n-paste. Di layar, Anda tidak dapat masuk ke mode salin, gulir kembali ke buffer, dan kemudian pergi ke jendela lain. Dalam tmux, Anda dapat memiliki beberapa jendela secara bersamaan dalam mode salin dengan penyangga digulir kembali ke posisi yang berbeda. Juga, ada beberapa buffer salinan. Dan Anda tidak perlu menambal sumber untuk mendapatkan pergerakan kursor fFtT.

William Pursell
sumber
8

Hal-hal yang saya dapatkan dari tmux yang tidak saya dapatkan dengan mudah di layar adalah:

  1. membuat panel vertikal terbelah
  2. multiplexing, yang kami gunakan untuk pemasangan jarak jauh dan lokal.
Jed Schneider
sumber
Seperti posting sebelumnya menyebutkan, layar memiliki panel vertikal yang terbelah (membutuhkan tambalan tanpa Ubuntu, tampaknya). Juga, multiplexing berfungsi dengan baik dan telah selama bertahun-tahun.
TerjebakLoops
pemisahan vertikal telah menjadi arus utama screensejak 4.2, dirilis pada tahun 2014. Banyak distro mengirimkan versi yang sangat lama, terutama Apple.
Neal Fultz
2
Kedua poin itu salah.
Forivin
2
Jawabannya tidak benar pada tahun 2018
Alec Istomin
5

Saya telah mengganti Layar GNU dengan tmux di setiap use case kecuali satu — ketika saya membutuhkan HyperTerminal yang setara untuk terhubung ke port serial. Seperti yang dicatat Aaron Toponce dalam artikelnya "Menghubungkan ke Serial Null Modems Dengan Layar GNU" , tmux FAQ menyatakan:

layar memiliki dukungan serial dan telnet; ini kembung dan tidak mungkin ditambahkan ke tmux.

Kasus penggunaan tmux saya yang khas adalah membuat sesi pengembangan multi-pane dan multi-jendela dalam kombinasi dengan tmuxinator . Jika Anda ingin mempelajari tmux , saya sarankan untuk membeli buku Brian P. Hogan, tmux: Productive Mouse-Free Development .

Matthew Rankin
sumber
Apakah Anda tahu cu Memanggil sistem lain ? Seri tty lebih sederhana dari layar , tetapi ringan dan bermanfaat!
F. Hauri
2

Saya telah menjadi pengguna berat Screen untuk waktu yang lama, tetapi saya menggunakan versi yang saya modifikasi kembali pada tahun 2002. Sebagian besar karena saya ingin dapat memiliki jendela "next / prev" pemesanan navigasi sesuai dengan urutan yang baru jendela dibuat, mirip dengan manajer jendela ubin seperti i3 atau Ion . Perilaku Layar standar adalah untuk 'berikutnya' dan 'sebelumnya' untuk pergi dengan nomor jendela, sehingga biasanya jendela 'baru' (meraih nomor terkecil yang tersedia) akan ditempatkan di tempat lain selain jendela 'berikutnya' - membingungkan jika Anda tidak ' t ingat angkanya. Perilaku pilihan saya sejak itu telah diterapkan di Tmux sebagai bendera ke perintah jendela baru pada tahun 2010 , dan opsi nomor jendela pada tahun 2012. Tambalan Layar saya, yang saya coba buat sebisa mungkin diterima, termasuk penambahan dokumentasi dan sebagainya, tidak menghasilkan diskusi apa pun di daftar Layar pada Juli 2002 (lalu "[email protected]", tidak bisa temukan arsip). Bahkan itu bahkan tidak diakui, bahkan ketika saya mengirimnya lagi setahun kemudian.

Sejak 2002, saya "mengubah" tambalan saya beberapa kali untuk diterapkan ke versi Layar yang lebih baru. Namun, ketika saya sampai ke versi 4.3 (2015) saya melihat perubahan tidak berdokumen yang memecahkan salah satu penggunaan layar saya - yaitu bahwa 'barang' sekarang menginterpolasi variabel lingkungan . Saya tidak memerlukan fitur itu, dan saya tidak tahu cara mudah menghindari argumen ke 'barang' (sehingga saya bisa mengirim teks yang berisi tanda dolar) jadi saya terus menggunakan versi 4.0 (dari 2004).

Saya menggunakan 'barang' Layar ('tombol-kirim' di Tmux) dalam fungsi Emacs yang mengirimkan konten wilayah Emacs saat ini ke nomor jendela tertentu. Dengan begitu ketika saya menulis kode dalam bahasa scripting, saya membuka seorang juru bahasa, saya memberikan jendela intepreter nomor khusus, dan kemudian saya dapat mengirim baris kode dari jendela editor saya langsung ke jendela juru bahasa menggunakan jendela Emacs mengikat ini. Ini hacky tapi saya lebih menyukainya daripada solusi murni-Emacs , karena saya juga dapat berinteraksi dengan penerjemah di jendela Layar menggunakan penekanan tombol standar. Ini agak seperti GUI IDE, tapi saya tidak harus menggunakan mouse atau menatap kursor yang berkedip.

Fitur lain yang saya terapkan di tambalan saya adalah kemampuan untuk "menandai" jendela, dan kemudian memposisikan ulang jendela yang ditandai menjadi "berikutnya" setelah yang sekarang. Bagi saya ini adalah cara yang jauh lebih alami untuk menata ulang jendela daripada memberi nomor baru; itu seperti paradigma copy / paste, atau "drag-and-drop". ( Baru-baru ini saya menemukan cara melakukannya di i3 juga.)

Seharusnya dimungkinkan untuk melakukan hal yang sama di Tmux, misalnya pada 2015 ada fasilitas untuk "menandai" sebuah panel. Atau mungkin solusi yang lebih mendasar dapat diselesaikan dengan skrip shell stateful. Saya menerapkan skrip dan keybindings pendek untuk mencoba metode "ditandai pane", dan itu bekerja beberapa kali tetapi kemudian Tmux crash dengan "[server yang hilang]". Kemudian saya menemukan Tmux crash bahkan tanpa saya mencoba melakukan sesuatu yang rumit. Rupanya itu telah crash untuk beberapa pengguna setidaknya selama beberapa tahun . Terkadang server macet, terkadang mulai menggunakan 100% CPU dan menjadi tidak responsif. Saya belum pernah melihat Screen melakukan ini.

Secara teori, Tmux lebih unggul daripada Screen dalam beberapa cara. Ini memiliki kemampuan skrip yang jauh lebih baik, artinya Anda dapat melakukan hal-hal seperti permintaan daftar jendela di sesi saat ini dari baris perintah, yang tidak mungkin dilakukan dengan Layar. Misalnya pada 2015 Layar menambahkan perintah untuk "mengurutkan jendela berdasarkan judul" . Saya tidak yakin kapan perintah khusus seperti itu akan berguna, tetapi ini dan variasi yang lebih praktis (mis. Mengurutkan windows dengan penggunaan CPU) relatif dapat dengan mudah dilakukan dari skrip shell di Tmux. Bagi saya akan terasa sulit untuk melakukan sesuatu yang sangat kreatif di Layar, setidaknya tanpa memodifikasi kode C.

Seperti poster lain yang disebutkan, Tmux memiliki model server tunggal yang saya lihat sebagai kelemahan utama, terutama ketika server mogok. Dimungkinkan untuk menyiasatinya dengan menetapkan soket terpisah untuk setiap "sesi". Tetap saya lebih suka satu-server-per-sesi Layar standar, yang tampaknya sedikit lebih elegan.

Bekerja dengan kode Layar, pada tahun 2002, mendidik dan menyenangkan bagi saya. Anehnya, untuk semua fitur tambahannya, Tmux memiliki sekitar 25% lebih sedikit baris kode daripada Layar (30k vs 40k). Saya perhatikan bahwa Tmux menggunakan banyak struktur data pohon dan daftar, yang agak sulit untuk saya pahami. Layar sepertinya lebih memilih array.

Seperti yang saya pahami, karena antarmuka terminal Unix sangat stabil, ada sedikit kebutuhan untuk kode Layar atau Tmux untuk beradaptasi dengan perubahan dalam sistem operasi yang mendasarinya. Program-program ini tidak benar-benar memiliki pembaruan keamanan seperti browser web atau server web atau bahkan shell. Saya belum melihat adanya masalah dalam menjalankan versi kustom Layar saya, terakhir diperbarui pada tahun 2004 (kecuali karena perlu menambahkan beberapa file konfigurasi untuk mencegah Systemd dari menghapus soket; file-file ini biasanya merupakan bagian dari paket distribusi). Mungkin saya bisa mengatasi masalah yang saya temui di Tmux dengan menjalankan versi Tmux sebelum mulai macet. Tentu saja, jika cukup banyak pengguna melakukan ini maka itu tidak akan sangat baik bagi pengguna baru, karena itu berarti bahwa lebih sedikit ahli akan mencari bug di versi resmi terbaru dari program-program ini. Namun, sulit untuk memotivasi diri saya untuk beralih ke produk yang tidak stabil untuk saya (Tmux terbaru) atau yang tidak memiliki fitur tertentu yang saya inginkan (Layar standar).

Saya tahu ini tidak memberikan jawaban yang mudah untuk pertanyaan OP, tetapi saya berharap perspektif saya bermanfaat.

Metamorf
sumber
2

Salah satu pengelola tmux, Thomas Adam, juga terdaftar sebagai pengelola untuk screenproyek ini walaupun ia hanya menyentuh kode tmux. Ini adalah pro besar tmux di layar.

ninrod
sumber
1

Saya akan mengatakan bahwa ketersediaan layar adalah kekuatannya, tetapi sistem windowingnya tidak semudah ditangani seperti . Saya harus mengatakan saya menggunakan sebagian besar waktu saat ini dan sebagai hasilnya memiliki banyak tab terminal daripada Layar windows.

@ Jed Schneider: Anda bisa mendapatkan pemisahan panel vertikal dengan Ctrl+ Adan kemudian |(bilah vertikal).

TafT
sumber