Apa cara lain untuk berbagi sesi tmux antara dua pengguna?

106

Saya mencari cara yang bersih dan mudah untuk berbagi sesi tmux dengan pengguna lain di mesin yang sama. Saya sudah mencoba -S socket-pathopsi itu, tetapi itu membutuhkan membuka semua izin dari jalur socket sebelum orang lain dapat terhubung ke sesi. Ini bekerja, tetapi sedikit rumit. Sebagai contoh:

# Me
$ tmux -S /tmp/pair
$ chmod 777 /tmp/pair

# Another user
$ tmux -S /tmp/pair attach

Ini berfungsi, tetapi kedua pengguna sekarang berbagi konfigurasi tmux yang sama (konfigurasi pengguna yang memulai sesi). Apakah ada cara untuk memungkinkan kedua pengguna menggunakan konfigurasi tmux mereka sendiri dan binding kunci tmux masing-masing?

Untuk poin bonus, idealnya, akan lebih baik untuk memberikan akses read-only dari sesi tmux kepada pengguna lain.

Ryan McGeary
sumber
10
Saya terlalu malas. Saya hanya menggunakan pertanyaan Anda sebagai jawaban saya: D
phunehehe

Jawaban:

46

Dari https://github.com/zolrath/wemux :

wemux meningkatkan tmux untuk membuat multiplexing terminal multi-pengguna menjadi lebih mudah dan lebih kuat. Hal ini memungkinkan pengguna untuk meng-host server wemux dan klien bergabung:

Mode Cermin memberi klien (pengguna SSH lain di mesin Anda) akses hanya baca ke sesi, memungkinkan mereka melihat Anda bekerja, atau

Pair Mode memungkinkan klien dan Anda sendiri untuk bekerja di terminal yang sama (kursor bersama)

Rogue Mode memungkinkan klien untuk memasangkan atau bekerja secara mandiri di jendela lain (kursor terpisah) dalam sesi tmux yang sama.

Ini fitur dukungan multi-server serta daftar pengguna dan pemberitahuan ketika pengguna melampirkan / melepaskan.

Ini adalah pembungkus shellscript di atas tmux - tidak perlu dikompilasi.

Peter
sumber
16

Saya sudah mencoba ini di Ubuntu tetapi tidak melihat mengapa itu tidak berfungsi pada varian unix lainnya.

Jika kedua pengguna adalah anggota dari grup yang sama dan jalur-soket menggunakan grup itu, kedua pengguna akan dapat melampirkan dengan baik.

Daripada harus mengubah izin dari socket-path setiap kali Anda membuatnya, Anda bisa membuat direktori spesifik untuk soket (saya menggunakan / var / tmux).

Pertama-tama tambahkan grup untuk pengguna tmux

$ addgroup $TMUX_GROUP

Buat direktori dengan grup yang disetel ke $ TMUX_GROUP dan gunakan bit setgid sehingga file yang dibuat dalam direktori secara otomatis memiliki grup yang diatur ke $ TMUX_GROUP.

$ mkdir /var/tmux
$ chgrp $TMUX_GROUP /var/tmux
$ chmod g+ws /var/tmux

Selanjutnya pastikan pengguna yang ingin berbagi sesi adalah anggota $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
Stephen Paulger
sumber
2
Jika Anda memiliki sistem file yang mendukung ACL , Anda tidak perlu menggunakan grup (dan khususnya Anda tidak memerlukan intervensi root). Tetapi ini tidak menyelesaikan masalah berbagi konfigurasi tmux , bukan?
Gilles
3
Untuk membuat bersama sesion: tmux -S $TMUX_GROUP/shared-session. Untuk melampirkannya dari akun lain:tmux -S $TMUX_GROUP/shared-session attach
jfs
Komentar di atas (oleh @JFSebastian) harus menjadi bagian dari jawabannya. Pengaturan yang diajukan ok, tetapi jawabannya kurang ketika menjelaskan cara menggunakannya secara nyata. Dan untuk semua jawaban di halaman ini, jawaban ini adalah yang lebih baik mengatasi masalah.
Dr Beco
12

Sejauh yang saya tahu, tidak mungkin untuk berbagi sesi dengan pengguna lain dengan cara "bersih".

Juga akses hanya baca tidak dimungkinkan, jika klien tidak menggunakan -rsakelar.

Karena layar terminal multiplexer lain mendukung fitur yang Anda cari, sayangnya juga dengan cara yang rumit ... Saya tidak yakin apakah ini pilihan untuk Anda, tetapi mungkin orang lain akan menganggap ini berguna.

Solusi untuk layar :

Tuan rumah sesi:

  • SUID sedikit layar harus diatur: - /
  • Buka sesi dengan screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Bergabunglah dengan sebuah sesi:

  • screen -x username/sessionname

Anda dapat mengatur bit izin untuk pengguna (* untuk semua) dengan :aclchgatau :chacl. # ditambahkan akan memengaruhi windows,? ditambahkan akan mempengaruhi perintah.

Contoh:

  • :aclchg * -wx "#,?" akan mengatur izin sesi untuk hanya membaca untuk semua pengguna
  • :aclchg foo +w 2 akan memberikan akses tulis untuk foo pengguna di jendela 2
  • :aclchg bar +x detach akan memberikan izin untuk melepaskan sesi ke bilah pengguna
echox
sumber
Untuk apa nilainya, saya merasa bahwa solusi tmux (meskipun sedikit lebih bertele-tele) sebenarnya "bersih", karena tidak melibatkan meninggalkan binari setuid mengambang di sekitar filesystem.
Glyph
Sayangnya, tmux menggunakan ini dengan cara ini memiliki masalah keamanan: mereka yang Anda akses dapat dengan mudah membuat sesi baru dan melakukan hal-hal di dalamnya yang tidak Anda lihat.
Curt J. Sampson
9

Ini tidak eksklusif untuk tmux, tetapi sekarang ini yang saya gunakan:

Anda dapat menggunakan script -f /path/to/some/fileuntuk menulis sesi terminal ke file. The -fpilihan update file saat Anda mengetik.

Orang lain (dengan hanya membaca izin ke file, jika Anda mau) dapat lakukan tail -funtuk melihat file, sesi terminal Anda. The -fpilihan membuat tailkeluaran apapun akan ditambahkan.

Kombinasi keduanya "menyinkronkan" tampilan terminal. Ketika digunakan dengan tmux, itu juga memiliki keuntungan menghindari ukuran yang terjadi ketika kedua pengguna memiliki resolusi yang berbeda. Ciri lain adalah bahwa setiap pengguna dapat bekerja di jendela atau sesi pribadi lain.

Salah satu ketidaknyamanan potensial adalah bahwa beberapa perintah (berbasis ncurses misalnya) dapat melakukan hal-hal aneh untuk output, melarikan diri urutan juga (warna). Namun, saya menggunakan ini di dalam tmux, dan tampaknya tmux memperbaiki masalah tersebut. Saya bisa melihat pengguna lain membaca halaman manual dan menggunakan perintah lain yang membuat buffer, warna ditampilkan dengan benar, dll.

Ini tidak memungkinkan untuk menulis ke terminal masing-masing (mungkin beberapa solusi lain dapat ditambahkan untuk itu).

Saya suka memiliki jendela dengan dua panel: satu panel berjalan script -funtuk melihat rekan saya, yang lain di sebelahnya di mana saya tail -fterminal.

Ini bekerja di ttys juga (dan soket atau pipa bernama dapat digunakan juga untuk file)

ferhtgoldaraz
sumber
Saya suka jawaban Anda! Ini sederhana dan fungsional!
JL