tmux กับหน้าจอ GNU [ปิด]


194

ค้นหาคำถามที่พบเกี่ยวกับ tmux (ปกติฉันใช้หน้าจอ GNU) คำถามของฉันคือสิ่งที่ข้อดีและข้อเสียของพวกเขาแต่ละคน โดยเฉพาะฉันไม่พบ tmux มากนัก


9
ยังกล่าวถึงที่superuser.com/questions/236158/tmux-vs-screen
Lloyd Dewolf

5
ดังที่คุณเห็นจากคำตอบที่ดีด้านล่างพวกเขาไม่ได้อิงตามความคิดเห็น
reinierpost

@reierierpost - ดูเหมือนว่าคนจำนวนมากที่นี่เร็วเกินไปที่จะปิดคำถามเพราะ "อิงกับความคิดเห็นเป็นหลัก" อย่างไรก็ตามเราสามารถลงคะแนนเพื่อเปิดใหม่
MountainX

แม้ว่าคำถามนี้เป็นคำถามเปรียบเทียบ แต่ฉันคิดว่าข้อโต้แย้งที่เป็นมืออาชีพและข้อโต้แย้งมีวัตถุประสงค์เพียงพอและทำให้เหตุผลความเห็นที่ใกล้ชิดไม่เป็นไรที่นี่ คุณสามารถตรวจสอบคำถาม SU ที่เชื่อมโยงได้คำตอบนั้นค่อนข้างโอเค
เตอร์

คำตอบ:


122

จากเว็บไซต์ของพวกเขา :

  • tmux แตกต่างจากหน้าจอ GNU อย่างไร มีอะไรให้อีกบ้าง?

tmux มอบข้อดีหลายประการบนหน้าจอ:

  • รูปแบบไคลเอนต์ - เซิร์ฟเวอร์ที่กำหนดไว้อย่างชัดเจน: windows เป็นเอนทิตีอิสระซึ่งอาจแนบมาพร้อมกันหลายเซสชันและดูจากไคลเอนต์หลายเครื่อง (เทอร์มินัล) รวมทั้งย้ายอย่างอิสระระหว่างเซสชันภายในเซิร์ฟเวอร์ tmux เดียวกัน
  • อินเตอร์เฟสคำสั่งที่สอดคล้องและมีเอกสารอย่างดีพร้อมกับไวยากรณ์เดียวกันไม่ว่าจะใช้แบบโต้ตอบเป็นคีย์การเชื่อมโยงหรือจากเชลล์
  • สคริปต์ได้อย่างง่ายดายจากเปลือก;
  • บัฟเฟอร์วางหลาย
  • ตัวเลือกของเค้าโครงแป้น vi หรือ emacs
  • ตัวเลือกเพื่อ จำกัด ขนาดหน้าต่าง
  • ไวยากรณ์บรรทัดสถานะที่ใช้งานได้มากขึ้นพร้อมความสามารถในการแสดงบรรทัดแรกของเอาต์พุตของคำสั่งเฉพาะ
  • เป็น codebase ที่สะอาดและทันสมัยขยายได้อย่างง่ายดาย

ยังมีหน้าจอคุณสมบัติบางอย่างที่รวม tmux ที่ไม่ใช้:

  • builtin สนับสนุนอนุกรมและ telnet; นี่คือการขยายตัวและไม่น่าจะถูกเพิ่มใน tmux
  • รองรับแพลตฟอร์มที่กว้างขึ้นเช่น IRIX และ HP-UX และสำหรับเทอร์มินัลคี่

4
หืม ... ตอนนี้ฉันต้องการลอง tmux ... เพียงเพราะหน้าจอไม่ทำงานสำหรับฉันเนื่องจากไม่มีการทำปุ่มลัด vi
xenoterracide

1
การทำคีย์เวิร์ด vi หรือ emacs นั้นหมายถึง tmux มาพร้อมกับค่าเริ่มต้นที่สะดวกสองชุดหรือไม่? เป็นไปได้ที่จะกำหนดค่าการโยงคีย์ของหน้าจอใหม่อย่างสมบูรณ์ด้วยไฟล์ rc
jw013

คุณสามารถกำหนดการเชื่อมโยงคีย์โดยพลการ ดู: openbsd.org/cgi-bin/…
nisc

เมื่อพวกเขาพูดเกี่ยวกับการใช้ที่สุดพวกเขาก็ควรจะแก้ข้อผิดพลาดโง่กับ<C-Left>ในในvim tmux
yo '19

45

ข้อแตกต่างประการหนึ่งคือการที่ทั้งสองทำหน้าที่อย่างไรเมื่อมีเทอร์มินัลหลายตัวเชื่อมต่อกับเซสชันเดียว

ด้วยหน้าจอมุมมองของเทอร์มินัลที่เชื่อมต่อแต่ละรายการจะไม่ขึ้นกับสิ่งอื่น ด้วย tmux เทอร์มินัลที่เชื่อมต่อทั้งหมดจะเห็นสิ่งเดียวกัน

สมมติว่าคุณมีสองเทอร์มินัลที่เชื่อมต่อกับเซสชัน tmux เดียว หากคุณพิมพ์^B1 ลงในเทอร์มินัลหนึ่งเทอร์มินัลอื่นก็จะเปลี่ยนเป็นหน้าต่าง 1

เมื่อคุณมีเทอร์มินัลสองตัวเชื่อมต่อกับเซสชันหนึ่งหน้าจอเดียวและคุณพิมพ์^A1 เป็นหนึ่งมันจะไม่มีผลกระทบกับเทอร์มินัลอื่น

นี้ขึ้นอยู่กับประสบการณ์ของฉันกับ tmux 1.2; ฉันเห็น 1.3 หมดแล้ว แต่ฉันไม่สังเกตเห็นอะไรเลยในรายการเปลี่ยนแปลงเกี่ยวกับการเปลี่ยนแปลงพฤติกรรมนี้

ถ้าคุณชอบพฤติกรรมหน้าจอและต้องการมันใน tmux:

หากเซสชัน tmux ดั้งเดิมของคุณถูกเรียก0(ค่าดีฟอลต์) คุณสามารถทำได้tmux new-session -t 0) เพื่อเริ่มเซสชันอิสระใหม่ที่เชื่อมต่อกับชุดหน้าต่างเดียวกันซึ่งจะมีมุมมองเป็นของตัวเอง


1
นี่คือความแตกต่างที่น่าสนใจ ฉันแน่ใจว่าสิ่งเหล่านี้มีข้อดีสำหรับกรณีการใช้งานที่แตกต่างกัน (ข้อได้เปรียบ tmux: สองคนที่แนบมากับเซสชั่น tmux เดียวกันเช่นสำหรับการเขียนโปรแกรมการจับคู่ระยะไกลมักจะเห็นสิ่งเดียวกันข้อดีของหน้าจอ: หนึ่งคนที่แนบมากับหน้าจอเดียวกันจากสองสถานที่สำหรับสองวัตถุประสงค์ที่แตกต่างกัน , พูด, เคียงข้างกัน (OS / หน้าต่างระดับผู้จัดการหน้าต่าง).)
lindes

10
หากเซสชั่น tmux ดั้งเดิมของคุณเรียกว่า "0" (ค่าเริ่มต้น) จากนั้นคุณสามารถทำ "tmux new-session -t 0") เพื่อเริ่มเซสชั่นอิสระใหม่เชื่อมต่อกับชุดหน้าต่างเดียวกันซึ่งสามารถมีของตัวเอง ดู. ฉันค่อนข้างมั่นใจว่ามันใช้งานได้ใน 1.2 / 1.3 แต่ฉันจำไม่ได้ทันที
Cos

@cos นี่เป็นเคล็ดลับที่ฉันต้องการ ขอบคุณมาก. ฉันหวังว่าฉันจะโหวตให้คุณสองครั้ง :) ฉันจะเริ่มติดตั้งใหม่กับ 'tmux new-session -t 0' ทุกครั้ง
jrwren

@Cos นี้ถูกเพิ่ม "จาก 1.0 ถึง 1.1, 05 พฤศจิกายน 2009" @jrwren คำสั่งสามารถ tmux new -t 0shorted
user285259

24

tmux ค่อนข้างใหม่เมื่อเทียบกับหน้าจอ GNU ข้อดี / ข้อเสียเป็นคำถามที่ยากลำบากเนื่องจากทั้งสองโปรแกรมแก้ปัญหาเดียวกันโดยประมาณ tmux ได้รับอนุญาต BSD ในขณะที่หน้าจอคือ GNU GPL เรื่องนี้สำคัญกับบางคน

ในขณะนี้หน้าจอจะแสดงมากขึ้น (บน Linux) นั่นคือคุณมีแนวโน้มที่จะพบมันบนกล่องลินุกซ์ที่กำหนดมากกว่า tmux tmux ถูกแสดงแทนบน OpenBSD มากกว่าเนื่องจากถูกรวมเป็นส่วนหนึ่งของการติดตั้งพื้นฐาน

โปรแกรมทั้งสองอนุญาตให้คุณทำสิ่งเดียวกันแม้ว่าสถานะของสิ่งต่าง ๆ จะซับซ้อนกว่านั้นเล็กน้อย การสลับไปมาระหว่างทั้งสองนั้นไม่ซับซ้อนมากนักเนื่องจากฟังก์ชั่นหน้าจอส่วนใหญ่พบว่ามันเข้ามาใน tmux แม้ว่าคุณจะเป็นผู้ใช้ที่มีพลัง แต่อย่างใดก็ตาม

เช่นเดียวกับโปรแกรมใด ๆ มันขึ้นอยู่กับความต้องการของคุณและสิ่งที่คุณคุ้นเคยกับมันมากขึ้น ให้พวกเขาลองและดูว่าคุณเล่นกับ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ tmux ดูhttps://tmux.github.io/


17

ความแตกต่างที่ใหญ่ที่สุดในการใช้งานของฉันคือในหน้าจอ Gnu คุณสามารถแยกเฟรมในแนวนอนได้เท่านั้นใน Tmux คุณสามารถแยกได้ทั้งแนวนอนและแนวตั้ง นี่เป็นเป้าหมายที่เคลื่อนที่แม้ว่าฉันจะบอกว่าการแบ่งแนวตั้งทำให้มันเข้าสู่หน้าจอได้

นอกจากนั้นสิ่งต่าง ๆ นั้นเกี่ยวกับความแบน


10
คุณสามารถแยกแนวตั้งในหน้าจอได้เช่นกัน mmm ... ที่เกรงว่ามันจะทำงานในการติดตั้งหน้าจอเริ่มต้นของ Ubuntu 10.10
Stann

4
@ และมีแพทช์ยืนยาวสำหรับการแยกแนวตั้งในหน้าจอ ... ที่ไม่เคยรวมอยู่ในอัปสตรีม ... แต่ฉันแน่ใจว่ามีผู้ใช้หลายคนใน Distro
xenoterracide

17

ฉันคิดว่าฉันจะพูดถึงbyobuเสื้อคลุมที่พร้อมใช้งานสำหรับหน้าจอที่ทำให้ดีขึ้นมากทันทีที่ออกจากกล่อง ฉันไม่ทราบว่าบางอย่างเช่นนี้มีให้สำหรับ tmux แต่byobuทำให้. screenrc ของฉันมีเพียงไม่กี่บรรทัด ลองอ่านบทความฉบับย่อเกี่ยวกับ byobu และสกรีนช็อต หน้าโครงการสำหรับ byobuอธิบายชื่อที่มาจากคำภาษาญี่ปุ่นสำหรับหน้าจอแบบหลายแผงที่ทำหน้าที่เป็นตัวแบ่งห้องพับ นอกจากนี้การเรียกใช้มันไม่เป็นอันตรายต่อการตั้งค่าหน้าจอของคุณดังนั้นคุณสามารถลองได้อย่างปลอดภัย เมื่อคุณเริ่มต้นเซสชันด้วยbyobuคุณสามารถเชื่อมต่อใหม่โดยใช้screenและยังไม่หลวมการปรับแต่งใด ๆ ที่ทำโดยbyobu(ดังนั้นใช้เฉพาะสำหรับการร้องขอเริ่มต้น) ข้อดีหลักสองประการคือ:

  • เริ่มหน้าจอที่มีแถบสถานะสองสามพร้อมข้อมูลที่เป็นประโยชน์
  • มอบการเชื่อมโยงปุ่มกดจำนวนมากเพื่อเข้าถึงการทำงานของหน้าจอได้ง่ายขึ้น

ฉันไม่ได้ใช้ส่วนโยงปุ่มลัด แต่พบว่าแถบสถานะมีประโยชน์อย่างแน่นอน

นอกจากนี้คุณอาจพบว่าลิงค์Vs tmuxลิงค์มีประโยชน์ ฉันคิดว่าส่วนใหญ่มันถูกกล่าวถึงแล้วโดยคำตอบที่มีอยู่


คำตอบของคุณจะมีประโยชน์มากขึ้นถ้าคุณสรุปคุณสมบัติbyobuเช่นคำตอบนี้พร้อมรายการคุณลักษณะ
Gilles

ตกลงฉันเพิ่มข้อมูลเพิ่มเติมbyobuแต่มันก็ง่ายเหมือนการรันคำสั่งและค้นหาด้วยตัวคุณเอง (มันเป็นเมนูขับเคลื่อน) เนื่องจากมันไม่ได้ทำให้การตั้งค่าหน้าจอที่คุณมีอยู่นั้นยุ่งเหยิง และฉันทำให้คำตอบของฉันเป็นชุมชนวิกิดังนั้นฉันสามารถแก้ไขได้โดยง่าย
haridsv

1
byobu ดูเหมือนว่าจะรองรับ tmux ด้วยเช่นกันอย่างน้อยก็ในเวอร์ชันล่าสุด
Darael

12

Drench ยกประเด็นที่น่าสนใจ - พฤติกรรมเริ่มต้นของการเชื่อมต่อสองครั้งไปยังเซสชันเดียวกันนั้นแตกต่างกันใน tmux อย่างไรก็ตามหากคุณต้องการแนบสองครั้งและมีมุมมองอิสระของหน้าต่างในเซสชันนั้น - เริ่ม tmux ด้วย

tmux new-session -t <session name>

ที่จะสร้างเซสชันใหม่สำหรับคุณและแนบหน้าต่างจากเซสชันที่มีอยู่แล้ว หากคุณไม่ได้ตั้งชื่อเซสชันแรกของคุณคุณสามารถเพิ่มหนึ่งรายการด้วย 'เปลี่ยนชื่อเซสชัน'


12

ข้อเสียอย่างหนึ่งที่สำคัญscreenก็คือมันไม่ได้พัฒนาอย่างแข็งขัน หน้าข้อผิดพลาดที่มีเกือบ 200 รายการที่ไม่ได้กำหนดที่จะกลับมากกว่า 5 ปี

tmux มีปัญหาที่เปิดอยู่เช่นกัน แต่ก็น้อยกว่าและได้รับการสนับสนุนมากกว่านี้


8

tmux เป็นรุ่นใหม่กว่าและมีคุณสมบัติอื่น ๆ อีกมากมาย

ฉันพบว่าการใช้งานที่ดีขึ้นอยู่กับการตั้งค่าที่ดี

ฉันใช้ vi (vim) เพื่อแก้ไข (ruby on rails) และมีการตั้งค่าบางอย่างเพื่อให้ใช้งานได้ดี

นี่คือไฟล์ ~ / .tmux.conf ที่มีการตั้งค่าที่เป็นประโยชน์มากมาย:

bind r source-file ~/.tmux.conf \; display "Reloaded!"  # Reload with ctrl-r
set -g prefix C-a         # prefix from ctrl-b to ctrl-a
unbind C-b                # allow ctrl-b for other things
set -sg escape-time 1     # quicker responses
bind C-a send-prefix      # Pass on ctrl-a for other apps
set -g base-index 1        # Numbering of windows
setw -g pane-base-index 1  # Numbering of Panes
bind \ split-window -h    # Split panes horizontal
bind - split-window -v    # Split panes vertically
bind h select-pane -L     # Switch to Pane Left
bind j select-pane -D     # Switch to Pane Down
bind k select-pane -U     # Switch to Pane Up
bind l select-pane -R     # Switch to Pane Right
bind -r C-h select-window -t :-  # Quick Pane Selection
bind -r C-l select-window -t :+  # Quick Pane Selection
bind -r H resize-pane -L 5       # Switch to Pane Left
bind -r J resize-pane -D 5       # Switch to Pane Down
bind -r K resize-pane -U 5       # Switch to Pane Up
bind -r L resize-pane -R 5       # Switch to Pane Right
setw -g mode-mouse off           # Mouse Off
set -g mouse-select-pane off     # Mouse Off  
set -g mouse-resize-pane off     # Mouse Off
set -g mouse-select-window off   # Mouse Off
setw -g monitor-activity on      # Activity Alerts
set -g visual-activity on
set -g status-fg white           # Status line Colors
set -g status-bg black
setw -g window-status-fg cyan    # Window list color
setw -g window-status-bg default
setw -g window-status-attr dim
setw -g window-status-current-fg white     # Active Window Color
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g pane-border-fg green      # Pane colors
set -g pane-border-bg black 
set -g pane-active-border-fg white 
set -g pane-active-border-bg yellow
set -g message-fg white          # Command/Message Line.
set -g message-bg black
set -g message-attr bright
set -g status-left-length 40     # Status Line, left side
set -g status-left "#[fg=white]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-utf8 on            # Status Line, right side
set -g status-right "-------"
set -g status-interval 60        # frequency of status line updates
set -g status-justify centre     # center window list
setw -g mode-keys vi             # vi keys to move 
unbind v                         # Open panes in same directory as tmux-panes script
unbind n
bind v send-keys " ~/tmux-panes -h" C-m
bind n send-keys " ~/tmux-panes -v" C-m
unbind Up                        # Maximizing and Minimizing...
bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp
bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"

Tmux เป็นรุ่นใหม่ แต่ 'คุณสมบัติอื่น ๆ อีกมากมาย' บอกเป็นนัย ๆ ว่ามันมีความเท่าเทียมกันของคุณสมบัติอย่างน้อยกับหน้าจอซึ่งไม่ใช่ในกรณี - นอกเหนือจากสิ่งที่กล่าวถึงที่อื่นการสนับสนุนผู้ใช้หลายคนของ tmux ขาดหายไปอย่างรุนแรง ไม่มี acls หรือสถานะและโดยทั่วไปแล้วมันแสดงให้เห็นถึงความแปลกใหม่ของ tmux ในสิ่งที่คุณสามารถทำได้ไม่ขัดมาก
รอบ

นั่นเป็นเรื่องดีที่จะรู้ ตอนนี้ฉันใช้มันมาหนึ่งปีแล้วและไม่ได้สังเกตเห็นความจำเป็นในการขัดสีแม้ว่าฮังการีอาจช่วยได้บ้าง สัญกรณ์นั่นคือ ok bad pun;) ไม่เคยใช้หน้าจอมาก่อนดังนั้นอย่าสังเกตเห็นปัญหาที่กล่าวถึง จะพบว่าการสลับไปที่หน้าจอและคุณลักษณะใหม่ ๆ หายไปในตอนนี้
Michael Durrant

8

ฉันจะใช้เสรีภาพในการเพิ่มหนึ่งความแตกต่าง:

tmux ขึ้นกับ ncurses ขณะที่หน้าจอไม่ได้ดึงองค์ประกอบเพิ่มเติม หากมีคนใช้เทอร์มินัลอีมูเลเตอร์ที่รองรับการเลื่อนเขาจะได้รับการเลื่อนด้วยหน้าจอ แต่ไม่ใช้กับ tmux (อย่างน้อยในการกำหนดค่าเริ่มต้น) สิ่งเดียวกันนี้ใช้กับการค้นหาและคุณสมบัติที่คล้ายกัน


2
ฉันไม่ได้เลื่อนหน้าจอเหมือน ... เคยเหรอ? : /
souser12345

ใช่ TE ของฉันรองรับการเลื่อนและหน้าจอแตก ... ฉันต้องเลื่อนพร้อมหน้าจอ -1 ดูเหมือนจะไม่ถูกต้อง
xenoterracide

@xenoterracide: อืม คุณมีสิทธิ์บางส่วน หน้าจอในระบบ distros / บางระบบ (Gentoo ที่เก่ากว่า) ไม่แตกในขณะที่บน (บาง Ubuntu ใหม่) ฉันมีความคิดว่าทำไมไม่มี.
Maciej Piechotka

อาจจะเป็นแพทช์ ... เราทุกคนเป็นระบบ 5.5 cent
xenoterracide

6

ฉันมีปัญหาในการรับหน้าจอเพื่อรองรับ utf-8 และ 256 สี แต่ tmux ทำงานนอกกรอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.