# Referência Rápida de GNU Screen

*Sessões, janelas, divisões, modo de cópia e compartilhamento*

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

## Gerenciamento de Sessões

### Criar e Listar Sessões

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

### Comandos de Sessão

| Command | Description |
|---------|-------------|
| `screen -S name` | Iniciar nova sessão nomeada |
| `screen -r name` | Reconectar à sessão desanexada |
| `screen -x name` | Conectar à sessão já conectada (compartilhar) |
| `screen -d name` | Desanexar sessão remota |
| `screen -d -r name` | Desanexar de outro lugar, reconectar aqui |
| `screen -D -RR` | Forçar desanexação e reconexão (agressivo) |
| `screen -ls` | Listar todas as sessões com PIDs |
| `screen -wipe` | Limpar sessões mortas |

## Janelas

### Noções Básicas de Janelas

| Command | Description |
|---------|-------------|
| `Ctrl-a c` | Criar nova janela |
| `Ctrl-a n` | Próxima janela |
| `Ctrl-a p` | Janela anterior |
| `Ctrl-a 0-9` | Alternar para janela por número |
| `Ctrl-a "` | Listar todas as janelas (interativo) |
| `Ctrl-a '` | Alternar para janela por nome/número |
| `Ctrl-a A` | Renomear janela atual |
| `Ctrl-a k` | Fechar janela atual |

### Gerenciamento de Janelas

| Command | Description |
|---------|-------------|
| `Ctrl-a w` | Mostrar lista de janelas na barra de status |
| `Ctrl-a Ctrl-a` | Alternar entre as duas últimas janelas |
| `Ctrl-a N` | Mostrar número e nome da janela |
| `exit / Ctrl-d` | Fechar janela (sair do shell) |

## Divisões e Regiões

### Comandos de Divisão

| Command | Description |
|---------|-------------|
| `Ctrl-a S` | Dividir horizontalmente (cima/baixo) |
| `Ctrl-a \|` | Dividir verticalmente (esquerda/direita) |
| `Ctrl-a Tab` | Mover foco para a próxima região |
| `Ctrl-a X` | Fechar região atual |
| `Ctrl-a Q` | Fechar todas as regiões exceto a atual |

### Fluxo de Trabalho com Regiões

```
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
```

## Modo de Cópia

### Rolagem e Cópia

| Command | Description |
|---------|-------------|
| `Ctrl-a [` | Entrar no modo de cópia/rolagem |
| `Space` | Iniciar/finalizar seleção (no modo de cópia) |
| `Enter` | Copiar seleção e sair do modo de cópia |
| `Ctrl-a ]` | Colar texto copiado |
| `h/j/k/l` | Mover cursor (teclas vi no modo de cópia) |
| `Ctrl-u / Ctrl-d` | Rolar meia página acima/abaixo |
| `/ or ?` | Buscar para frente/trás |
| `Esc` | Sair do modo de cópia |

### Fluxo de Cópia

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

## Desanexar e Reconectar

### Desanexar

| Command | Description |
|---------|-------------|
| `Ctrl-a d` | Desanexar sessão atual |
| `Ctrl-a D D` | Desanexar e sair |
| `Ctrl-a z` | Suspender screen (como Ctrl-Z) |
| `screen -d PID` | Desanexar sessão remotamente por PID |

### Reconectar

```
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
```

### Fluxos de Trabalho Persistentes

```
# 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
```

## Compartilhamento

### Modo Multi-Usuário

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

### Controle de Acesso

| Command | Description |
|---------|-------------|
| `:multiuser on` | Habilitar modo multi-usuário |
| `:acladd user` | Conceder acesso total ao usuário |
| `:aclchg user -w '#'` | Tornar usuário somente leitura (todas as janelas) |
| `:acldel user` | Remover acesso do usuário |
| `screen -x user/sess` | Conectar à sessão compartilhada |

## Configuração

### Essenciais do ~/.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
```

### Configurações Úteis

| Command | Description |
|---------|-------------|
| `startup_message off` | Suprimir mensagem de inicialização |
| `defscrollback N` | Definir buffer de rolagem (padrão 100) |
| `escape ^Bb` | Mudar tecla de prefixo para Ctrl-b |
| `shelltitle '$ \|bash'` | Definir títulos de janela automaticamente |
| `caption always '%n %t'` | Sempre mostrar legenda com info da janela |
| `autodetach on` | Desanexar automaticamente ao desconectar (padrão ativado) |
| `vbell on` | Usar sino visual em vez de sonoro |

## Padrões Comuns

### Configuração de Desenvolvimento

```
# 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
```

### Log e Monitoramento

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

### Referência Rápida

| Command | Description |
|---------|-------------|
| `Ctrl-a ?` | Mostrar todos os atalhos de teclado |
| `Ctrl-a :help` | Ajuda integrada |
| `Ctrl-a :source file` | Carregar arquivo de configuração |
| `Ctrl-a :screen cmd` | Executar comando em nova janela |
| `Ctrl-a :quit` | Fechar todas as janelas e sair da sessão |
