# Tham Khảo Nhanh GNU Screen

*Session, cửa sổ, chia đôi, chế độ sao chép và chia sẻ*

> Source: GNU Screen Manual (gnu.org/software/screen) · MIT

## Quản Lý Session

### Tạo & Liệt Kê Session

```
screen                        # new unnamed session
screen -S work                # new session named "work"
screen -ls                    # list all sessions
screen -list                  # same as -ls
```

### Lệnh Session

| Command | Description |
|---------|-------------|
| `screen -S name` | Bắt đầu session mới có tên |
| `screen -r name` | Kết nối lại session đã tách |
| `screen -x name` | Gắn vào session đang dùng (chia sẻ) |
| `screen -d name` | Tách session từ xa |
| `screen -d -r name` | Tách ở nơi khác, kết nối lại ở đây |
| `screen -D -RR` | Buộc tách và kết nối lại (mạnh) |
| `screen -ls` | Liệt kê tất cả session kèm PID |
| `screen -wipe` | Dọn dẹp session đã chết |

## Cửa Sổ

### Cơ Bản về Cửa Sổ

| Command | Description |
|---------|-------------|
| `Ctrl-a c` | Tạo cửa sổ mới |
| `Ctrl-a n` | Cửa sổ tiếp theo |
| `Ctrl-a p` | Cửa sổ trước đó |
| `Ctrl-a 0-9` | Chuyển sang cửa sổ theo số |
| `Ctrl-a "` | Liệt kê tất cả cửa sổ (tương tác) |
| `Ctrl-a '` | Chuyển sang cửa sổ theo tên/số |
| `Ctrl-a A` | Đổi tên cửa sổ hiện tại |
| `Ctrl-a k` | Đóng cửa sổ hiện tại |

### Quản Lý Cửa Sổ

| Command | Description |
|---------|-------------|
| `Ctrl-a w` | Hiển thị danh sách cửa sổ trên thanh trạng thái |
| `Ctrl-a Ctrl-a` | Chuyển đổi giữa hai cửa sổ gần nhất |
| `Ctrl-a N` | Hiển thị số và tên cửa sổ |
| `exit / Ctrl-d` | Đóng cửa sổ (thoát shell) |

## Chia Đôi & Vùng

### Lệnh Chia Đôi

| Command | Description |
|---------|-------------|
| `Ctrl-a S` | Chia ngang (trên/dưới) |
| `Ctrl-a \|` | Chia dọc (trái/phải) |
| `Ctrl-a Tab` | Chuyển focus đến vùng tiếp theo |
| `Ctrl-a X` | Đóng vùng hiện tại |
| `Ctrl-a Q` | Đóng tất cả vùng trừ vùng hiện tại |

### Quy Trình Làm Việc với Vùng

```
Ctrl-a S             # split horizontal
Ctrl-a Tab           # move to new region
Ctrl-a c             # create window in region
Ctrl-a :resize 20   # set region to 20 lines
```

## Chế Độ Sao Chép

### Cuộn Lại & Sao Chép

| Command | Description |
|---------|-------------|
| `Ctrl-a [` | Vào chế độ sao chép/cuộn lại |
| `Space` | Bắt đầu/kết thúc chọn (trong chế độ sao chép) |
| `Enter` | Sao chép vùng chọn và thoát chế độ sao chép |
| `Ctrl-a ]` | Dán văn bản đã sao chép |
| `h/j/k/l` | Di chuyển con trỏ (phím vi trong chế độ sao chép) |
| `Ctrl-u / Ctrl-d` | Cuộn lên/xuống nửa trang |
| `/ or ?` | Tìm kiếm tiến/lùi |
| `Esc` | Thoát chế độ sao chép |

### Quy Trình Sao Chép

```
Ctrl-a [         # enter copy mode
Space            # mark start (navigate first)
Space            # mark end + copy (navigate first)
Ctrl-a ]         # paste into current window
```

## Tách & Kết Nối Lại

### Tách

| Command | Description |
|---------|-------------|
| `Ctrl-a d` | Tách session hiện tại |
| `Ctrl-a D D` | Tách và đăng xuất |
| `Ctrl-a z` | Tạm dừng screen (như Ctrl-Z) |
| `screen -d PID` | Tách session từ xa theo PID |

### Kết Nối Lại

```
screen -r                 # reattach (if only one session)
screen -r work            # reattach by name
screen -r 12345           # reattach by PID
screen -d -r work         # steal session from other terminal
```

### Quy Trình Làm Việc Liên Tục

```
# Start long-running task, detach, reconnect later
screen -S build
make -j4 all        # start build
Ctrl-a d             # detach, go home
screen -r build      # reattach later
```

## Chia Sẻ

### Chế Độ Nhiều Người Dùng

```
# Host enables multiuser
Ctrl-a :multiuser on
Ctrl-a :acladd alice    # grant access to user alice
# Alice attaches
screen -x hostuser/sessionname
```

### Kiểm Soát Truy Cập

| Command | Description |
|---------|-------------|
| `:multiuser on` | Bật chế độ nhiều người dùng |
| `:acladd user` | Cấp quyền truy cập đầy đủ cho người dùng |
| `:aclchg user -w '#'` | Đặt người dùng chỉ đọc (tất cả cửa sổ) |
| `:acldel user` | Xóa quyền truy cập của người dùng |
| `screen -x user/sess` | Gắn vào session chia sẻ |

## Cấu Hình

### Thiết Yếu trong ~/.screenrc

```
startup_message off          # skip splash screen
defscrollback 10000          # scrollback buffer lines
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL                # use login shell
```

### Cài Đặt Hữu Ích

| Command | Description |
|---------|-------------|
| `startup_message off` | Ẩn thông báo khởi động |
| `defscrollback N` | Đặt buffer cuộn (mặc định 100) |
| `escape ^Bb` | Đổi phím prefix thành Ctrl-b |
| `shelltitle '$ \|bash'` | Tự đặt tiêu đề cửa sổ |
| `caption always '%n %t'` | Luôn hiển thị caption kèm thông tin cửa sổ |
| `autodetach on` | Tự tách khi mất kết nối (mặc định bật) |
| `vbell on` | Dùng chuông hình ảnh thay chuông âm thanh |

## Mẫu Phổ Biến

### Thiết Lập Phát Triển

```
# Auto-create windows in .screenrc
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell  2 bash
select 0                     # start on editor window
```

### Ghi Log & Giám Sát

```
Ctrl-a H                     # toggle logging to screenlog.N
Ctrl-a M                     # monitor window for activity
Ctrl-a _                     # monitor window for silence
```

### Tham Khảo Nhanh

| Command | Description |
|---------|-------------|
| `Ctrl-a ?` | Hiển thị tất cả phím tắt |
| `Ctrl-a :help` | Trợ giúp có sẵn |
| `Ctrl-a :source file` | Nạp file cấu hình |
| `Ctrl-a :screen cmd` | Chạy lệnh trong cửa sổ mới |
| `Ctrl-a :quit` | Đóng tất cả cửa sổ và thoát session |
