sexta-feira, 27 de fevereiro de 2026

INSTALAR (e jogar) COUNTER STRIKE 1.6 (install cs 1.6) NO LINUX


INTRODUÇÃO

O Counter Strike 1.6 dispensa apresentações, então: estão dispensadas.

Todo mundo sabe que jogo é esse... e se não sabe deveria saber!

A instalação aqui foi testada e aprovada no Debian 13, mas nada impede que não possa ser realizada a contento em outras distribuições, bastando adaptar os comandos, pois o código fonte do CS1.6 serve em qualquer Linux.

Na seção ESTUDO DE CASOS tem algumas coisas para fazer em caso de erros, conexão bloqueada, etc.

Na seção SCRIPTS tem alguns scripts úteis.

O procedimento aqui é puramente didático porque para jogar CS online gratuito basta entrar no link:

https://play-cs.com/pt/servers

escolher um servidor com o "map" desejado e conectar.

Contudo, para quem quer ter o CS1.6 instalado e personalizado no Linux e por uma questão de aprendizado, leia todo o artigo antes de sair executando comandos.

Parece muita coisa para fazer porque está bem explicado, mas é tranqüilo e rápido!


VÍDEO

Vídeo onde você pode me ver jogando e falhando miseravelmente nas missões:

https://drive.google.com/file/d/1lZat4icP9PeSDy14y927XDMi3BAhJ3t6/view?usp=sharing

Sem mais delongas...


Fire in the hole!

Need backup!

Sector clear!

The bomb has been planted!

Go go go!


DOWNLOAD

Abra o terminal.

$ sudo apt update

$ sudo apt install xz-utils dos2unix wget

Qbittorrent é opcional, mas instale caso baixe o .tar da Free Linux PCGames:

$ sudo apt install qbittorrent


Quando tiver de usar "sudo" indicará no comando.

Para o download tem duas opções.

1)

https://freelinuxpcgames.com/counter-strike/

Clique no link acima e mais abaixo na página encontre o link:

Half-Life/Blue Shift/Opposing Force/Counter-Strike 1.6 [x86] [Multi] [Native]

Caso, ao clicar no link, abrir uma janela de propaganda, feche-a e clique novamente no link que o download abrirá.




2)

https://drive.google.com/file/d/1qIWFrOLrUl-GRVX05fcXo35gRGqdUydU/view?usp=sharing


Caso aparecer a mensagem:

"O Google Drive não pode fazer a verificação de vírus neste arquivo.

O arquivo HLCS_Linux.tar.xz (757M) é muito grande para a verificação de vírus do Google. Você ainda quer fazer o download?"

Ignore e clique em "Fazer o download mesmo assim".

Disponibilizei no Google Drive porque, algumas vezes, o download do torrent do Free Linux PCGames falha ou demora muito.


Obs.: disponibilizei, também, no Google Drive, a pasta "cstrike" com "models, "maps, etc, para quem não quiser esperar baixar do servidor, são 387,2 MiB. Basta fazer o download e copiar a pasta para /opt/cstrike/HLCS/game, substituindo a pasta de mesmo nome que ali está:

https://drive.google.com/drive/folders/1X4nTQ_Nd5mG9KQg4x_tm2IEjZmHZGOnh?usp=sharing


INSTALANDO


Execute:

$ sudo apt update
$ sudo apt install locales
$ sudo dpkg-reconfigure locales





Terminará:

/opt/cstrike/HLCS$ sudo dpkg-reconfigure locales
Generating locales (this might take a while)...
  en_US.UTF-8... done
  pt_BR.UTF-8... done
Generation complete.


Habilitando, instalando dependências e bibliotecas de 32 bits:

$ sudo dpkg --add-architecture i386
$ sudo apt update


$ sudo apt install libc6:i386 libstdc++6:i386 libgcc-s1:i386 lib32gcc-s1 \
libgl1:i386 libglu1-mesa:i386 libx11-6:i386 libxext6:i386 \
libxrandr2:i386 libxcursor1:i386 libxinerama1:i386 \
libasound2:i386 libopenal1:i386 libsdl1.2debian:i386 zlib1g:i386 \
libfontconfig1:i386 libxft2:i386 libgtk2.0-0:i386 libnss3:i386 libnspr4:i386


$ sudo apt install libgpg-error0:i386 libcurl4:i386 libsdl2-2.0-0:i386 libxi6:i386 libvdpau-dev:i386 libgl1-mesa-dri:i386
$ sudo apt install libnss-myhostname:i386 libnm0:i386 libnss3:i386 libnss-mdns:i386 libpulse0:i386


Criando uma pasta para instalação (instalei em /opt):

$ cd /opt
$ sudo mkdir cstrike
$ cd cstrike


Copie o arquivo de onde você o baixou, no caso, da pasta Downloads, adapte se o caminho for diferente:

$ sudo cp ~/Downloads/HLCS_Linux.tar.xz /opt/cstrike/


Verifique:

$ ls

HLCS_Linux.tar.xz


Descompacte:

$ sudo tar -xJf HLCS_Linux.tar.xz
$ ls

HLCS  HLCS_Linux.tar.xz


Garanta que seu usuário é o dono:

$ cd
$ sudo chown -R $USER:$USER /opt/cstrike/HLCS


Agora faremos cópia e executaremos o jogo pela primeira vez para criar automaticamente o diretório /opt/cstrike/HLCS/game/platform/config:

$ cd /opt/cstrike/HLCS
$ ls

bshift.sh  cstrike.sh  game  hl.sh  oforce.sh  steam-runtime


$ cp cstrike.sh cstrike.sh.bkp
$ vim cstrike.sh (uso o vim, use o teu editor de texto)

Apague o conteúdo e coloque dentro:

#!/bin/bash

export SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
export DIR="$(dirname "$SCRIPT")"

cd "$DIR/game"

# Para executar em tela cheia basta tirar -window -w 1024 -h 768
"$DIR/steam-runtime/run.sh" ./hl.sh -game cstrike -window -w 1024 -h 768


Salve e saia.


Somente acrescentamos os parâmetros "-window -w 1024 -h 768" para definir a tela do jogo em 1024/768, depois, caso queira, basta retirar os parâmetros que o jogo abrirá em tela cheia.

Garantindo que seja um arquivo unix/linux/ascii:

$ dos2unix cstrike.sh

dos2unix: convertendo o arquivo cstrike.sh para formato Unix...


Garanta a permissão de execução:

$ chmod +x cstrike.sh


Testando:

$ ./cstrike.sh


Teste clicando em New Game > de dust2 > Start > OK escolha as opções, por exemplo, 1 TERRORIST FORCES > 1 PHOENIX CONNEXION.


Entrarás no jogo, mas ainda não estás conectado em um servidor para jogar.

Neste momento tu podes atirar (botão esquerdo), movimentar-se (setas de direção), apreciar o cenário, etc, mas nada além disso.

Saia pressionando a tecla Esc depois escolha Quit > Quit game.

Verifique se a pasta foi criada automaticamente com os arquivos:

$ ls /opt/cstrike/HLCS/game/platform/config/

InGameDialogConfig.vdf ServerBrowser.vdf


Criando link para a pasta de downloads:

$ ln -s /opt/cstrike/HLCS/game/cstrike_downloads /opt/cstrike/HLCS/game/cstrike


CONECTANDO


Entre no jogo novamente:

$ cd /opt/cstrike/HLCS
$ ./cstrike.sh


Faça o caminho novamente: New Game > de dust2 > Start > OK. Escolha as opções, por exemplo, 1 TERRORIST FORCES > 1 PHOENIX CONNEXION.

Tentaremos conectar em um servidor.

Dentro do jogo digite a tecla aspas_duplas/apóstrofo (",'): abrirá o console.

Lembrando que, para abrir o console, deve-se sempre abrir um New Game > etc > etc e entrar no jogo para depois conectar em um servidor.


Comandos:

cl_allowdownload 1
cl_allowupload 1
connect 91.211.247.221:27015


Obs.: depois veremos como tornar permanente os comandos cl_allowdownload 1 e cl_allowupload 1.

Caso você tiver sorte e completar a conexão de primeira, começará a baixar os arquivos e depois você entrará no CS1.6 online com outros jogadores de várias partes do mundo, agora é com você!

Caso aparecer uma mensagem: "SERVER IS FULL", parábens, você também é uma pessoa de sorte, pois realizou a conexão "de prima", porém, o servidor está cheio, aguarde e tente de novo mais tarde ou tente outro servidor.

Em alguns servidores pode demorar horas para baixar os arquivos da primeira vez (depende da conexão), depois é mais rápido em qualquer servidor, pois os arquivos, muitas vezes, são os mesmos.

Caso mudar de computador pode copiar a pasta /opt/cstrike/HLCS/game/cstrike.

Segue link para um site com uma porção de servidores espalhados pelo mundo (inclusive no Brasil), os quais você pode testar antes de realizar outros procedimentos.


Link geral:

https://www.gametracker.com/search/cs/


Link Brasil:

https://www.gametracker.com/search/cs/BR/


Caso terminar com "Disconnected Failed to contact game server", clique em "Close" para fechar a janela.

Caso terminar com "Cannot continue without model models/player/ugc_terror_vip/ugc_terror_vip.mdl, disconnecting.", feche a janela.

Você terá de ver o porquê não conectou.

Desligue o Firewall (se tiver), o Selinux, etc, para testar.

Sugestão de servidores (prontos para copiar e colar no console).


O formato é: "connect" seguido do IP e, depois dos dois pontos, a porta na qual o servidor atua:

connect 91.211.247.221:27015 (Omonas)
connect 93.114.82.202:27015 (Brasil ZMX League CS)
connect 5.199.130.133:27015 (Romênia)
connect 155.133.248.50:27015
connect 177.54.152.56:27015
connect 131.196.198.52:27052
connect 216.52.148.19:27011 (topfrag chicago)
connect 66.165.238.178:27018 (so-cal los angeles)
connect 45.32.174.155:27015 (dreampoint miami 1)
connect 172.96.172.86:27015 (dreampoint 2)
connect 172.96.172.84:27015 (dreampoint 3)
connect 172.96.172.84:27016 (dreampoint 4)


Caso, mesmo assim, não conseguir conexão de jeito nenhum, sugiro alguns procedimentos:

desabilite o firewall (se tiver), desabilite o Selinux e quaisquer módulos de segurança que, porventura, tenha no computador, somente para testar.

Caso tiver roteamento na sua máquina, desabilite para testar e identificar quem está bloqueando a conexão.

Além disso, tem provedores que utilizam CGNAT (Carrier Grade NAT) que é uma técnica usada por provedores de internet para compartilhar um único endereço IPv4 público entre vários clientes, contornando o esgotamento global de endereços IPv4. Vários usuários compartilham o mesmo IP público, mas cada um recebe um conjunto de portas lógicas diferentes e isso ocasiona problemas de NAT fechado em jogos, dificuldades no acesso remoto a câmeras/servidores, ou serviços de P2P.

As soluções para isso são:

1- Entrar em contato com o provedor para solicitar um IP público (cobrado geralmente);

2- Utilizar IPv6, que não precisa de NAT.

Contudo, nenhuma dessas é viável para muitos usuários de internet, mas vamos contornar isso na seção CONFIGURANDO.


OPCIONAL


TCPDUMP

Esta seção é OPCIONAL, caso queira, pode pular para a seção CONFIGURANDO:

Veja a placa de rede:

$ ip addr


Execute o jogo e com ele rodando abra outra janela do terminal e rode (substitua o nome da placa de rede enp3s0 pela sua):

$ sudo tcpdump -i enp3s0 -n udp port port (caso não tiver instale com sudo apt install tcpdump)


Exemplo:

$ sudo tcpdump -i enp3s0 -n udp port 27015




Caso der "Disconnected Failed to contact game server" e a saída do tcpdump der algo parecido com:

[sudo] senha para usuario: 
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp8s0f0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:00:02.357829 IP 172.16.5.99.27005 > 91.211.247.221:27015: UDP, length 23
10:00:08.360962 IP 172.16.5.99.27005 > 91.211.247.221:27015: UDP, length 23
10:00:14.360969 IP 172.16.5.99.27005 > 91.211.247.221:27015: UDP, length 23
10:00:20.377670 IP 172.16.5.99.27005 > 91.211.247.221:27015: UDP, length 23


Vemos que os pacotes estão tentando sair, mas tem algo bloqueando a volta, provavelmente o firewall, um proxy, o CGNAT, etc, pois não tem nenhum registro.

172.16.5.99.27005 < 91.211.247.221:27015: UDP, length 23

ou

91.211.247.221:27015 > 172.16.5.99.27005:num_porta: UDP, length 23.


No comando "sudo tcpdump -i enp3s0 -n udp port 27015" tenha o cuidado de colocar a sua placa de rede e coloque a porta correspondente ao connect do jogo, por exemplo, connect xxx.xxx.xxx.xxx:27052, connect xxx.xxx.xxx.xxx:27015, etc.

É de bom tom, de vez em quando, limpar o rastreador de conexões antes de abrir o jogo e executar o tcpdump:


$ sudo conntrack -F (se o comando não existir, instale com sudo apt install conntrack).


CONFIGURANDO

Caso tenha conseguido a conexão de primeira, as configurações que seguem são opcionais, contudo, aconselho a fazer até a seção "CloudflareWARP", exclusive - pois se você conseguiu a conexão "de prima" não precisa do CloudflareWARP -, mas depois configure o arquivo userconfig.cfg com as suas configurações pessoais (se souber o que está fazendo).


Vá em /opt/cstrike/HLCS/game/cstrike (ou o caminho que você escolheu para instalar) e altere o arquivo ServerBrowser.vdf:

$ cd /opt/cstrike/HLCS/game/platform/config/
$ cp ServerBrowser.vdf ServerBrowser.vdf.bkp
$ vim ServerBrowser.vdf


No início, substitua "internet" por "favorites", ficando assim:

"Filters"
{
    "gamelist" "favorites"
    "Filters"
    {
...


Salve e saia.


Retirando caracteres nulos e convertendo:

$ sed -i 's/\x0//g' ServerBrowser.vdf
$ dos2unix ServerBrowser.vdf


Crie o arquivo:

$ vim MasterServers.vdf


Coloque dentro:

"MasterServers"
{
    "0"
 { 
 "name" "Omona"
        "addr" "91.211.247.221:27015"
 }
    "1"
 { 
 "name" "ZMX League CS"
        "addr" "93.114.82.202:27015"
 }
    "2"
     {
        "name" "Romenia"
 "addr" "5.199.130.133:27015"
     }
    "3"
     {
        "name" "BR CSNaPegada DM"
        "addr" "131.196.196.44:27015"
     }
    "4"
     {
        "name" "BRXGames Fun"
        "addr" "177.54.151.114:27042"
     }
    "5"
     {
        "name" "BRXGames Pega Bandeira"
        "addr" "177.54.151.234:27030"
     }
    "6"
     {
        "name" "ClaN Brasilia"
        "addr" "177.54.152.56:27015"
     }
}


Salve e saia.


Altere a ordem do servidores masters como quiser.

Caso, futuramente, queira acrescentar/tirar servidores, edite o arquivo MasterServers.vdf e acrescente/tire os servidores desejados.

$ dos2unix MasterServers.vdf


Removendo todos os atributos ocultos do sistema e setando permissões:

$ cd
$ sudo chattr -i /opt/cstrike/HLCS/game/platform/config/ServerBrowser.vdf
$ sudo chattr -i /opt/cstrike/HLCS/game/platform/config/MasterServers.vdf
$ sudo chown -R $USER:$USER /opt/cstrike/HLCS/
$ chmod 644 /opt/cstrike/HLCS/game/platform/config/MasterServers.vdf
$ chmod 644 /opt/cstrike/HLCS/game/platform/config/ServerBrowser.vdf


CloudflareWARP

Agora vamos instalar o Cloudflare-Warp que é um serviço gratuito de Domain Name System (DNS) da empresa americana Cloudflare em parceria com a APNIC. O serviço funciona como um servidor de nomes recursivo fornecendo resolução de nomes de domínio para qualquer host na Internet.

Serve para vários jogos, downloads bloqueados pelo provedor, etc. Na seção SCRIPTS tem um script pronto que desliga o WARP.

Veremos o passo a passo para instalar no Debian.

Para outras distribuições veja o link:

https://pkg.cloudflareclient.com/


Adicione a chave e o repositório.

Adicionando cloudflare gpg key:

$ curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg


Adicionando o repo no repositório:

$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list


Instalando:

$ sudo apt update && sudo apt install cloudflare-warp
$ sudo systemctl enable warp-svc
$ sudo systemctl start warp-svc


Registre o cliente (apenas na primeira vez):

$ warp-cli registration new

...
Accept Terms of Service and Privacy Policy? [y/N] y
Success


Conecte:

$ warp-cli connect

Success


Verificando o status:

$ warp-cli status

Status update: Connected

Network: healthy


$ ip addr

Na saída terá algo assim, podendo mudar a numeração dependendo de quantas placas de rede o vivente tem:

4: CloudflareWARP: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc mq state UNKNOWN group default qlen 500
    link/none 
    inet 172.16.0.2/32 scope global CloudflareWARP
       valid_lft forever preferred_lft forever
    inet6 2608:4710:111:879c:4b44:ebb:317a:cacb/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fd80::ca44:f9cc:aec0:681b/64 scope link stable-privacy proto kernel_ll 
       valid_lft forever preferred_lft forever


Geralmente o WARP cria uma interface chamada CloudflareWARP.

Você pode ver o tráfego passando por ela com:

$ sudo tcpdump -i CloudflareWARP -n udp


Se a interface não aparecer é porque algumas distribuições Linux precisam que o módulo "tun" do kernel esteja carregado.

$ sudo modprobe tun
$ sudo systemctl restart warp-svc
$ warp-cli connect


Para tornar permanente:

$ sudo vim /etc/modules-load.d/modules.conf

Acrescente no final o nome do módulo: tun.

Salve e saia.

Reinicie o gerenciador de internet e tente de novo "ip addr".


Começando:

$ warp-cli disconnect
$ warp-cli mode warp
$ warp-cli connect


Criando o diretório para armazenar os Favoritos e Servidores Masters:

$ mkdir -p "$HOME/.hlcs/platform/config"
$ cp /opt/cstrike/HLCS/game/platform/config/ServerBrowser.vdf ~/.hlcs/platform/config/
$ cp /opt/cstrike/HLCS/game/platform/config/MasterServers.vdf ~/.hlcs/platform/config/


Faz symlink de /opt/cstrike/HLCS/game/platform/config e garante persistência:

$ ln -s ~/.hlcs/platform/config /opt/cstrike/HLCS/game/platform/config


Criando o script cstrike_com.sh

$ cd /opt/cstrike/HLCS
$ vim cstrike_com.sh


Coloque dentro:

#!/bin/bash
# Script que roda e conecta o CS1.6 com WARP

# Otimiza o MTU da interface
sudo ip link set dev CloudflareWARP mtu 1280

# Limpa a rota anterior e fixa com o IP CloudflareWARP
sudo ip route add 131.196.198.52 dev CloudflareWARP 2>/dev/null

export SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
export DIR="$(dirname "$SCRIPT")"

cd "$DIR/game"

# Executa o jogo usando o tunel
# -window: abre em modo janela
# -w 1024 -h 768: define o tamanho da janela
# -nomousegrab: evita que o mouse fique preso
#./hl_linux -game cstrike -nomousegrab -ip 0.0.0.0 +clientport 27005
# Pode colocar -ip 0.0.0.0 no lugar de -ip 172.16.0.2

"$DIR/steam-runtime/run.sh" ./hl_linux -game cstrike -window -w 1024 -h 768 -nomousegrab -nofbo -nomsaa -gl_clear 1 -windowed -gl -ip 0.0.0.0 +clientport 27005


Salve e saia.


$ dos2unix cstrike_com.sh
$ chmod +x cstrike_com.sh


Execute o script cstrike_com.sh (deve ser executado como usuário):

$ ./cstrike_com.sh


Sempre faça o procedimento de New Game > Escolher um map > Start > etc, até entrar no jogo para depois conectar no servidor.

Abra o console digitando a tecla aspas_duplas/apóstrofo ("').

Em outro terminal rode, caso quiser:

$ sudo tcpdump -i CloudflareWARP -n udp


Tente uma conexão no console do jogo, por exemplo:

cl_allowdownload 1
cl_allowopload 1
connect 91.211.247.221:27015


Agora é contigo!!!

Caso der "Server is full" vá tentando outro servidor.

Em alguns servidores pode demorar horas para baixar os arquivos da primeira vez (depende da conexão), depois é mais rápido em qualquer servidor, pois os arquivos, muitas vezes, são os mesmos.


Caso mudar de computador pode copiar a pasta /opt/cstrike/HLCS/game/cstrike.

Na saída do tcpdump, caso estiver usando, procure algo assim:


10:59:20.103549 IP 162.159.200.123.123 > 172.16.1.22.52574: NTPv4, Server, length 48
10:59:23.018999 IP 172.16.1.22.27005 > 93.114.82.202:27015: UDP, length 23
10:59:23.179207 IP 91.211.247.221:27015 > 172.16.1.22.27005: UDP, length 32
10:59:23.202248 IP 172.16.1.22.27005 > 91.211.247.221:27015: UDP, length 452
10:59:23.360583 IP 91.211.247.221:27015 > 172.16.1.22.27005: UDP, length 40
10:59:23.402670 IP 172.16.1.22.27005 > 91.211.247.221:27015: UDP, length 16


Terá ida e volta:

172.16.0.2.27005 > 91.211.247.221:27015 (SAINDO)

91.211.247.221:27015 > 172.16.0.2.27005 (ENTRANDO)


Para remover:

$ sudo apt purge cloudflare-warp
$ sudo rm -rf /etc/cloudflare-warp
$ sudo rm -rf /var/lib/cloudflare-warp


ESTUDO DE CASOS

Os comandos apresentados não serão explicados, você pode (e deve, se quiser) pesquisar o significado de cada um. A internet é auto-explicativa.


1) Caso tiver proxy na rede e não dê para desabilitá-lo, teste mudando de modo WARP para PROXY, por exemplo:

$ warp-cli disconnect
$ warp-cli mode proxy
$ warp-cli connect


Para voltar:

$ warp-cli disconnect
$ warp-cli mode warp
$ warp-cli connect


Mas o modo WARP deve bastar.

Para ver mais opções:

$ warp-cli --help


2) Caso aparecer a mensagem "Sorry, no-steam p48 clients are not allowed on this server", significa que o servidor de Counter-Strike 1.6 que você está tentando acessar bloqueia jogadores que usam versões "piratas" (No-Steam) com um protocolo de rede antigo (p48, ou protocolo 48), uma vez que versões piratas (No-Steam) são mais fáceis de burlar e não possuem verificação de integridade oficial (VAC - Valve Anti-Cheat).

No nosso caso significa somente que a versão do CS é muito antiga (32 Bits), a 1.6.



3) Caso aparecer uma mensagem dizendo "Cannot continue without model models/player/ugc_terror_vip/ugc_terror_vip.mdl, disconnecting.", feche ela e execute no console do jogo (caso não quiser copiar e colar, basta digitar as primeiras letras que o console abrirá o leque de opções):

cl_allowdownload 1
cl_allowupload 1
setmaster enable 1
setmaster add xxx.xxx.xxx.xxx:xxxx
sv_lan 0
region 255
heartbeat




Especialmente no servidor "5.199.130.133:27015" que aparece essa mensagem.

Caso isso persistir, tente conectar utilizando o CloudflareWARP com seu respectivo script.

Caso ainda assim persistir, baixe a pasta "cstrike" de:

https://drive.google.com/drive/folders/1X4nTQ_Nd5mG9KQg4x_tm2IEjZmHZGOnh?usp=sharing


Copie a pasta para /opt/cstrike/HLCS/game, substituindo a pasta de mesmo nome que está ali.

Depois que você colocar manualmente, esse loop deve parar. Mas, se ao tentar conectar você ainda vir essas mensagens viciadas, digite isso no console para "resetar" a pilha de rede do jogo:

clcli
clientport 27005
net_resend 3
reconnect


4) Estando atrás de um PFSense numa rede interna, provavelmente não conseguirá jogar em alguns servidores.

Primeiro tente fixando os DNSs no arquivo /etc/resolv.conf, por exemplo:

nameserver 1.1.1.1
nameserver 8.8.8.8


Caso persistir, peça para o Administrador do pfSense...

Criar Regra de NAT Estático:

Ir em Firewall > NAT > Outbound.

Mudar o modo para Hybrid Outbound NAT (se estiver em Automatic).


Criar uma Mapping Rule no topo:

Interface: WAN

Protocol: UDP

Source: [Seu IP Local ou o Alias do seu PC]

Source Port: Any (ou 27000-27030)

Destination: Any

Translation/target: Marcar a caixa [x] Static Port.


Sem o Static Port, o pfSense faz o "Source Port Remap". O servidor envia os dados do jogo de volta para a porta X, mas o seu PC está ouvindo na porta Y. Isso causa o erro de "Reliable channel overflow" ou pings instáveis.

Ajuste de MTU/MSS (Opcional se o Lag continuar):

Se o download de outros arquivos continuar falhando, peça para ele verificar se há um MSS Clamping ativo em Interfaces > WAN. Para redes com túneis (como o WARP), setar o MSS para 1300 costuma estabilizar o tráfego fragmentado.


5) Exemplo de regras para liberar no firewall, principalmente as portas nas chains input e output.

O exemplo é com o NFTables, mas é somente um exemplo onde você deve mudar/acrescentar regras para seu cenário específico, não copie e cole essas regras como elas estão, pois pode acontecer de perder o acesso à internet:

table inet filter {

    chain input {
        type filter hook input priority 0; policy drop;

        # Loopback
        iif lo accept

        # Conexoes ja estabelecidas
 ct state invalid drop
        ct state established,related accept
        tcp dport { 22, 80, 443 } ct state new accept

        # DHCP
        udp dport {67,68} accept

        # Portas abertas jogo
        udp dport 27000-28015 accept

  ip protocol icmp accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;

        # Conexoes ja estabelecidas
 ct state invalid drop
        ct state established,related accept
    
 # DHCP
 udp dport {67,68} accept

 # Portas abertas jogo
        udp dport 27000-28015 accept

 ip protocol icmp accept
    }

   chain output {
        type filter hook output priority 0; policy drop;

        # Conexoes ja estabelecidas
 ct state invalid drop
        ct state established,related accept
 tcp dport { 22, 80, 443 } ct state new accept

        # DNS
        udp dport 53 accept
        tcp dport 53 accept

        # NTP/NTS
        udp dport 123 accept
        tcp dport 4460 accept

        # DHCP (cliente, se aplicavel)
        udp dport 67 accept
        udp sport 68 accept

 ip protocol icmp accept
    }


SCRIPTS

1) fechar_cs.sh

#!/bin/bash

echo "Encerrando o Counter-Strike e limpando o ambiente..."

# 1. Mata o processo do jogo e do carregador
pkill -9 hl_linux
pkill -9 hl.sh

# 2. Desconecta o Cloudflare WARP
warp-cli disconnect

# 3. Mata o Xephyr (caso tenha ele, descomente)
# pkill -9 Xephyr

# 4. Restaura o MTU da placa física para o padrão (1500)
# Ajuste para tua placa de rede
sudo ip link set dev enp3s0 mtu 1500

echo "Túnel WARP desligado. Internet restaurada para o padrão!"


Salve e saia.


Dando permissão de execução:

$ dos2unix ~/fechar_cs.sh
$ sudo chmod +x ~/fechar_cs.sh


2) cstrike_com.sh

#!/bin/bash
# Script que roda e conecta o CS1.6 com WARP

# Otimiza o MTU da interface
sudo ip link set dev CloudflareWARP mtu 1280

# Limpa a rota anterior e fixa com o IP CloudflareWARP
sudo ip route add 131.196.198.52 dev CloudflareWARP 2>/dev/null

export SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
export DIR="$(dirname "$SCRIPT")"

cd "$DIR/game"

# Executa o jogo usando o tunel
# -window: abre em modo janela
# -w 1024 -h 768: define o tamanho da janela
# -nomousegrab: evita que o mouse fique preso
#./hl_linux -game cstrike -nomousegrab -ip 0.0.0.0 +clientport 27005
# Pode colocar -ip 0.0.0.0 no lugar de -ip 172.16.0.2
"$DIR/steam-runtime/run.sh" ./hl_linux -game cstrike -window -w 1024 -h 768 -nomousegrab -nofbo -nomsaa -gl_clear 1 -windowed -gl -ip 0.0.0.0 +clientport 27005

Salve e saia e dê permissão de execução.


Para criar um ícone na área de trabalho do Debian 13, vamos criar um arquivo .desktop. Isso permitirá que você abra o jogo como qualquer outro aplicativo do sistema, sem precisar abrir o terminal.

Abra o terminal e crie o arquivo na sua pasta de Área de Trabalho:

$ vim ~/Área\ de\ Trabalho/CounterStrike.desktop


Coloque dentro:

[Desktop Entry]
Name=Counter-Strike 1.6
Comment=Jogar CS 1.6 no Debian 13 via WARP
Exec=bash -c "/opt/cstrike/HLCS/game/cstrike.sh"
Icon=/opt/cstrike/HLCS/game/cstrike.ico
Terminal=false
Type=Application
Categories=Game;

Nota: Se você não tiver um arquivo .ico, pode usar o caminho /usr/share/icons/gnome/48x48/devices/input-gaming.png para um ícone genérico.

$ chmod +x ~/Área\ de\ Trabalho/CounterStrike.desktop


Como agora você vai abrir pelo ícone, certifique-se de que o seu script cstrike_com.sh comece garantindo que o WARP esteja conectado automaticamente:

#!/bin/bash
# Garante que o WARP está ligado antes do jogo
warp-cli connect
sleep 2

# ... restante do seu script (caminhos, bibliotecas e execução) ...


Você também pode criar um atalho para o seu script de fechar (fechar_cs.sh) seguindo os mesmos passos acima ou simplesmente rode o comando warp-cli disconnect para liberar a internet para outros usos (como streaming/downloads pesados) quando terminar a jogatina.


3) cstrike_sem.sh

#!/bin/bash

# Script que conecta CS1.6 sem WARP

export SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
export DIR="$(dirname "$SCRIPT")"

cd "$DIR/game"

# Para executar em tela cheia basta tirar -window -w 1024 -h 768
"$DIR/steam-runtime/run.sh" ./hl.sh -game cstrike -window -w 1024 -h 768

Salve, saia e dê permissão de execução.

Pode criar um atalho na área de trabalho também ficando com três ícones: um para entrar no CS1.6 pelo WARP, outro sem o WARP e outro para fechar o CS.


CONCLUSÃO

Os procedimentos aqui foram puramente didáticos porque para jogar CS online gratuito basta entrar no link:

https://play-cs.com/pt/servers


Escolher um servidor com o "map" desejado e conectar.


Para remover:

$ cd /opt/cstrike
$ sudo rm -rf HLCS


Descompacte novamente e reinicie o processo após a descompactação.


Configurações pessoais


$ vim /opt/cstrike/HLCS/game/cstrike/userconfig.cfg

// ====================================
// Configurações permanentes do jogador
// ====================================

// Downloads
cl_allowdownload 1
cl_download_ingame 1
cl_allowupload 0

// --------------------
// PERFORMANCE / FPS
// --------------------
fastsprites 0
fps_max 101
fps_override 0
gl_vsync 0
gl_overbright 0
gl_polyoffset 0
gl_monolights 1
gl_dither 0
r_detailtextures 0
mp_decals 20
r_decals 20
cl_showfps 1

// Mouse
m_filter 1
m_rawinput 1
m_customaccel 0
sensitivity 2.5
m_pitch 0.022
m_yaw 0.022
lookstrafe 0
lookspring 0

// Rede
rate 25000
cl_cmdrate 101
cl_updaterate 101
cl_cmdbackup 2
cl_interp 0
cl_interp_ratio 1
cl_lc 1
cl_lw 1
cl_dlmax 1024
cl_timeout 60

// --------------------
// HUD / VISUAL LIMPO
// --------------------
cl_himodels 0
cl_minmodels 1
cl_shadows 0
cl_weather 0
hud_fastswitch 1
hud_centerid 0
net_graph 3
net_scale 5

// --------------------
// SOM (CLARO E PRECISO)
// --------------------
hisound 1
snd_noextraupdate 1
_snd_mixahead 0.1
room_off 1
voice_enable 1
voice_scale 0.75

// --------------------
// MISC / QUALIDADE DE VIDA
// --------------------
cl_dynamiccrosshair 1
cl_crosshair_translucent 1
developer 0
con_mono 0
console 1


Salve e saia.


$ dos2unix /opt/cstrike/HLCS/game/cstrike/userconfig.cfg


O arquivo acima deve ser utilizado com cuidado.

Comece testando com somente os três parâmetros da seção Downloads, depois vá acrescentando e testando.

As configurações feitas no console sobrescrevem temporariamente o arquivo /opt/cstrike/HLCS/game/cstrike/config.cfg, o userconfig.cfg é o arquivo persistente.

Qualquer configuração deve ser feita somente nele.

Se mudar algo no console do jogo, o userconfig.cfg continua intacto.

No jogo você pode conversar com outros malucos.

SHALL WE PLAY A GAME?


sexta-feira, 20 de fevereiro de 2026

Hardening NTP/Chrony no Linux

INTRODUÇÃO

O hardening (fortalecimento) de NTP (Network Time Protocol - Protocolo de Tempo da Rede) em sistemas web é essencial para garantir a integridade de logs, certificados SSL/TLS, sessões de usuário e auditorias, evitando ataques de amplificação DDoS e manipulação de tempo. O protocolo utiliza a porta UDP 123 e com NTS utiliza a porta 4460.

Muitas vezes, até uma simples atualização do sistema pode falhar caso o relógio não estiver sincronizado com os servidores. Em uma rede interna, os access points podem não fornecer internet caso o relógio não esteja sincronizado com o servidor ou se o servidor estiver com a hora errada.

A segurança e sincronização de horários tornou-se crítica atualmente. Hoje, a sincronização de tempo não serve apenas para "deixar o relógio certo", mas é um requisito de segurança e funcionamento para quase tudo em uma rede moderna.

Deixo alguns exemplos de falhas de segurança dependentes do tempo (relógio certo):

1- Certificados

Se o servidor estiver com a data errada, mesmo que por poucos minutos, ele pode considerar um certificado válido como expirado ou vice-versa, derrubando sites, VPNs e conexões seguras.


2- Protocolos de Autenticação

Sistemas como Active Directory (Kerberos), dependendo das configurações, podem parar de funcionar se a diferença entre o cliente e o servidor for maior do que 5 minutos, impedindo o login de usuários.


3- Análise de Logs e Perícia

Se cada dispositivo tiver um horário diferente é impossível reconstruir a linha do tempo do evento (ex: "O ataque começou no Switch às 10:00, mas o servidor diz que foi às 10:05").


4- Wi-Fi e Roaming

Em redes com múltiplos Access Points (APs) a sincronização é vital para o Roaming (passar de um AP para outro sem cair). Protocolos como 802.11r usam chaves temporais. Se o AP 1 e o AP 2 estiverem dessincronizados o dispositivo do usuário pode ser desconectado ao tentar trocar do AP 1 para o AP 2 (ou vice-versa), ou seja, o usuário estará caminhando pela empresa/universidade/campus/etc e perderá o acesso à internet.

Ao final tem um link para instalação e configuração do Chrony para quem não o tenha instalado e configurado.


CONFIGURANDO

NTP ou Chrony (use um ou outro).


NTP
No Linux (geralmente /etc/ntp.conf), aplique restrições rígidas para evitar que seu servidor seja usado em ataques de reflexão:

$ sudo vim /etc/ntp.conf

Coloque dentro:

# Restringe acesso padrao
restrict default kod nomodify notrap nopeer noquery # IPv4
restrict -6 default kod nomodify notrap nopeer noquery # IPv6
#
# Permite localhost
restrict 127.0.0.1
restrict -6 ::1
#
# Permite upstream de confiança (ex: ntp.br)
restrict pool
ntp.br
nomodify notrap noquery
server a.st1.ntp.br iburst nts
server b.st1.ntp.br iburst nts
server c.st1.ntp.br iburst nts
server d.st1.ntp.br iburst nts
#
# Desabilita monitoramento (desabilita o 'comando' monlist usado para ataques DDoS)
disable monitor

Salve e saia.

Reinicie o serviço:

$ sudo systemctl restart ntp

Ou

$ sudo systemctl restart ntpd

CHRONY
Para quem tiver o Chrony instalado não necessita configurar o NTP, pois este deve estar desabilitado ou desinstalado para não dar conflito.

No chrony.conf verifique e/ou adicione:

# Rede(s) permitida(s)
allow 192.168.1/24

# Fontes de tempo
server a.st1.ntp.br iburst nts
server b.st1.ntp.br iburst nts
server c.st1.ntp.br iburst nts
server d.st1.ntp.br iburst nts

# Estratégia de segurança padrão do Chrony:
# 1. Não precisa de 'restrict default' (bloqueio é o padrão)
# 2. Localhost já é permitido para o chronyc via socket
# 3. Ratelimit para evitar abusos (similar ao kod e limited do NTP)
ratelimit interval 3 burst 16

# Salva a derivação do relógio
driftfile /var/lib/chrony/drift

# Desativar completamente a porta de comandos via rede
cmdport 0

Salve e saia.

Reinicie:

$ sudo systemctl restart chrony


- O Chrony suporta NTS nativamente. Basta adicionar a opção nts ao final da linha do servidor;
- O Chrony bloqueia tudo por padrão. Você não precisa configurar "regras de negação" para o público. Ele só responderá a quem estiver na lista allow;
- O Chrony já permite acesso via localhost (127.0.0.1/::1);
- O Chrony é imune ao ataque monlist que afetava o NTP antigo, pois não possui esse comando;
- Para os servidores do NTP.br (que suportam NTS), a autenticação já está "embutida" no protocolo, precisando somente do parâmetro nts.


CONCLUSÃO

Boas práticas

Use múltiplas fontes: Configure pelo menos 4 servidores NTP.

Isolamento: Utilize um servidor NTP interno, por exemplo, o Chrony, sincronizado com os servidores https://ntp.br/.

NTS: Considere o uso de NTS para autenticação criptográfica moderna.

Autenticação NTP: Use chaves simétricas para garantir que o servidor Web sincronize somente com servidores NTP autorizados (O Chrony usa Network Time Security (NTS) nativo que é mais seguro).

Caso tenha firewall (IPTables, NFTables, PFSense, UFW, etc), libere a porta 4460 para o NTS funcionar.

Exemplos:

$ sudo ufw allow out 4460/tcp

$ sudo iptables -A OUTPUT -p tcp --dport 4460 -j ACCEPT

No nftables.conf:

table inet filter {
    chain output {
        type filter hook output priority 0; policy drop;
        
        # Tráfego para sincronização de tempo (NTP.br)
        tcp dport 4460 accept comment "NTS Key Exchange"
        udp dport 123 accept comment "NTP Traffic"
        
        # Permitir tráfego já estabelecido
        ct state established,related accept
    }
}

Passo a Passo no pfSense:

Vá em Firewall > Rules.

Selecione a aba da interface onde seu servidor está (geralmente LAN).

Clique em Add (seta para cima) para criar uma nova regra:

Action: Pass
Interface: LAN
Address Family: IPv4 (ou IPv4+IPv6 se usar ambos)
Protocol: TCP
Source: O IP fixo do seu servidor (recomendado) ou LAN net.
Destination: Any (ou crie um Alias com os IPs do NTP.br para ser mais rígido).
Destination Port Range: From 4460 to 4460.
Description: Permitir NTS Key Exchange (Chrony)

Clique em Save e depois em Apply Changes.

Muitas vezes, além da regra de porta, o pfSense pode ter o pacote pfBlockerNG ou Snort/Suricata instalado. Se eles estiverem ativos, podem estar identificando o tráfego na porta 4460 como "não padrão" e descartando a conexão.


Testando no Chrony

Após aplicar as regras e reiniciar o firewall, teste novamente a conectividade.

Reinicie o Chrony:

$ sudo systemctl restart chrony

Teste de rede:

$ nc -zv a.st1.ntp.br 4460

(Deve retornar Connection to ... succeeded).

Caso retornar algo como:

KeyID 0/KLen 0: A conexão segura não foi estabelecida.


Verifique o handshake:

$ sudo chronyc authdata

Atmp (Attempts): O número 2 em Last Atmp mostra que o Chrony tentou, mas não obteve sucesso recente em renovar os cookies de segurança.

Todos os servidores agora devem exibir KeyID maior que 0 e KLen como 256.

Comandos úteis Chrony:

$ sudo systemctl restart chrony

$ sudo service chrony restart

$ sudo chronyc sources

$ sudo chronyc authdata

$ sudo chronyc tracking

$ nc -zv time.cloudflare.com 4460

$ nc -zv nts.netnod.se 4460

$ nc -zv a.st1.ntp.br 4460

$ sudo journalctl -u chrony | grep -i nts

$ ping -s 1400 a.st1.ntp.br

Se você quiser ver em tempo real o que seu Linux está fazendo ao reiniciar, abra um segundo terminal e deixe rodando:

$ sudo journalctl -f -u chrony

Instalação e configuração do Chrony:



Guia de configuração NTS no Linux com Chrony:


domingo, 25 de janeiro de 2026

Converter os repositórios Debian para o novo formato


O Debian tem um novo formato de arquivo de repositórios.

Caso quiser converter o Debian 12 (Bookworm) e o Debian 13 (Trixie), faça o seguinte:

Debian 12 - Atualizando as chaves

$ sudo curl -fsSL https://ftp-master.debian.org/keys/archive-key-12.asc -o /usr/share/keyrings/debian-archive-keyring.gpg


Debian 13 -Atualizando as chaves

$ sudo curl -fsSL https://ftp-master.debian.org/keys/archive-key-13.asc -o /usr/share/keyrings/debian-archive-keyring.gpg

Renomeie o sources.list antigo e crie o novo arquivo de repositórios:

$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.old

$ sudo vim /etc/apt/sources.list.d/debian.sources <<< usei o vim, use teu editor preferido.


Conteúdo do debian.sources para Debian 12

# bookworm e bookworm-updates
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: bookworm bookworm-updates
Components: main non-free-firmware contrib non-free
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# bookworm-security
Types: deb deb-src
URIs: http://security.debian.org/debian-security/
Suites: bookworm-security
Components: main non-free-firmware contrib non-free
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# Backports
# O repositório backports deixe comentado, pois não é recomendado deixá-lo habilitado o tempo todo, depois caso quiser  instalar um pacote backport em específico, basta alterar o debian.sources para "yes" e executar:
# sudo apt install -t bookworm-backports nome-do-pacote
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: bookworm-backports
Components: main non-free-firmware contrib non-free
Enabled: no
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# Proposed Updates
# Deixe comentado e utilize quando necessário.
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: bookworm-proposed-updates
Components: main non-free-firmware contrib non-free
Enabled: no
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Salve e saia.

$ sudo apt update


Conteúdo do debian.sources para Debian 13

# trixie e trixie-updates
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main non-free-firmware contrib non-free
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# trixie-security
Types: deb deb-src
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main non-free-firmware contrib non-free
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# Backports
# O repositório backports deixe comentado, pois não é recomendado deixá-lo habilitado o tempo todo, depois caso quiser  instalar um pacote backport em específico, basta alterar o debian.sources para "yes" e executar:

# sudo apt install -t trixie-backports nome-do-pacote
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: trixie-backports
Components: main non-free-firmware contrib non-free
Enabled: no
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# Proposed Updates
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: trixie-proposed-updates
Components: main non-free-firmware contrib non-free
Enabled: no
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Salve e saia.

$ sudo apt update

A opção "Enabled: yes" é opcional, pois é padrão, mas coloque caso depois quiser desabilitar com "Enable: no" (equivalente a comentar) um repositório.

O repositório backports deixe comentado, pois não é recomendado deixá-lo habilitado o tempo todo, depois caso quiser instalar um pacote backport em específico, basta alterar o debian.sources para "yes" e executar:

$ sudo apt update
$ sudo apt install -t bookworm-backports nome-do-pacote

$ sudo apt update
$ sudo apt install -t trixie-backports nome-do-pacote


No repositório "proposed-updates" todas as mudanças da versão estável (stable) (e antiga (oldstable)) lançada passam por um período de testes extensivos antes de serem aceitas no repositório. Essas atualizações da versão estável (e da antiga) são chamadas de versão pontual.

A preparação para as versões pontuais é feita através do mecanismo proposed-updates. Pacotes atualizados são enviados para uma fila separada chamada p-u-new (o-p-u-new) antes de serem aceitos no proposed-updates (e no oldstable-proposed-updates).
São pacotes que cujas atualizações ainda não foram plenamente testadas com o conjunto do sistema, podemos dizer que são atualizações "betas" que depois provavelmente serão incorporadas nos repositórios.

$ sudo apt update
$ sudo apt install -t bookworm-proposed-updates nome-do-pacote

$ sudo apt update
$ sudo apt install -t trixie-proposed-updates nome-do-pacote

Depois é só retornar o Enabled para "no" e "sudo apt update" para atualizar os índices.


Você pode, também, em vez de realizar o procedimento manualmente, utilizar o comando pronto:

$ sudo apt modernize-sources

O arquivo /etc/apt/sources.list será transformado em /etc/apt/sources.list.d/debian-sources e será criado um backup em /etc/apt/sources.list.bak.
Porém, como o comando é automatizado, ele transformará somente o básico e caso tiver repositórios comentados eles não serão atualizados no debian.sources. Você terá de entrar no arquivo, corrigir manualmente e executar:

$ sudo apt update

E caso você tenha baixado as chaves GPG manualmente:

$ sudo apt reinstall debian-archive-keyring
$ sudo apt reinstall debian-keyring
$ sudo apt update

Referência


quinta-feira, 15 de janeiro de 2026

VMD no Linux - Instalação e configuração


INTRODUÇÃO

A concretização deste curto artigo demorou um pouco, mas a idéia já vicejava há algum tempo.

Utilizei o Debian para a instalação, mas pode ser utilizada outra distribuição adaptando-se os respectivos comandos e dependências.

Como sempre, leia todo este singelo texto antes de sair executando comandos.

* Esta é uma atualização do artigo de 2014 em:

https://www.vivaolinux.com.br/artigo/VMD-no-Debian-Instalacao-e-configuracao/


VMD

O VMD (Visual Molecular Dynamics) é um software projetado para modelagem, visualização e análise de sistemas biológicos, tais como proteínas, ácidos nucleicos, montagens lipídicas em bicamadas, etc, mas também pode ser utilizado para visualizar moléculas mais gerais.

O VMD pode ler arquivos de proteínas padrão e exibir a sua estrutura. O VMD fornece uma ampla variedade de métodos de renderização e colorização de moléculas: pontos e linhas simples, esferas e cilindros de CPK, tubos de backbone, desenhos animados e outros.

O VMD pode ser usado para animar e analisar a trajetória de uma simulação de dinâmica molecular (DM).

Em particular, o VMD pode atuar como uma interface gráfica de um programa externo de dinâmica molecular, exibindo e animando uma determinada molécula.


INSTALAÇÃO

Site do VMD:

https://www.ks.uiuc.edu/Research/vmd/

Para fazer o download do VMD, acesse o link:

https://www.ks.uiuc.edu/Development/Download/download.cgi?UserID=&AccessCode=&ArchiveID=1730

Ou

https://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMD

Após clicar em um dos links, faça o registro, logue-se, aceite a licença e faça o download.

Salve o arquivo em um diretório de sua escolha, atualize o sistema e instale as dependências:

# apt update
# aptitude safe-upgrade
# apt install binutils kmod
# apt install csh tcsh
# apt install libstdc++6
# apt install rlwrap

Após entrar no diretório onde salvou o arquivo descompacte e instale:

# cd VMD (por exemplo, eu criei uma pasta chamada VMD)
# tar -xzvf vmd-2.0.0a8.bin.LINUXAMD64.tar.gz
# cd vmd-2.0.0a8

Depois faça:

# ./configure
using configure.options: LINUXAMD64 OPENGL OPENGLPBUFFER FLTK TK ACTC CUDA CXX11 IMD LIBSBALL XINERAMA XINPUT LIBTACHYON LIBPNG ZLIB VRPN NETCDF COLVARS TCL PYTHON PTHREADS NUMPY SILENT

# cd src

# make install
Make sure /usr/local/bin/vmd is in your path.
VMD installation complete.  Enjoy!

Execute:

# vmd

... e deverão abrir as janelas do VMD.


CONFIGURAÇÃO

Caso apareça o seguinte erro: rlwrap: No match.

Edite o arquivo:

# vim /usr/local/bin/vmd

Usei o vim, uses teu editor preferido.

Dentro do arquivo, encontre esse bloco (aproximadamente a partir linha 343):

# detect if we have rlwrap available to have commandline editing
set vmdprefixcmd=""
if ($?VMDNORLWRAP == 0) then
  if (("${ARCH}" == "LINUX") || ("${ARCH}" == "LINUXAMD64")) then
    set rlwrap=`which rlwrap`
    if ( -x "$rlwrap" ) then
      if ( -f ${MASTERVMDDIR}/vmd_completion.dat ) then
        set vmdprefixcmd="rlwrap -C vmd -c -b(){}[],&^%#;|\\ -f ${MASTERVMDDIR}/vmd_completion.dat "
      else 
        set vmdprefixcmd="rlwrap -C vmd -c -b(){}[],&^%#;|\\ "
      endif
      # indicate that rlwrap is in use to cause VMD to 
      # auto-disable internal line editing features since rlwrap is active
      setenv VMDRLWRAPINUSE 1
    endif
  endif
endif


E deixe ele assim:


# detect if we have rlwrap available to have commandline editing

set vmdprefixcmd=""
if ($?VMDNORLWRAP == 0) then
  if (("${ARCH}" == "LINUX") || ("${ARCH}" == "LINUXAMD64")) then
    set rlwrap=`which rlwrap`
    if ( -x "$rlwrap" ) then
      if ( -f ${MASTERVMDDIR}/vmd_completion.dat ) then
#        set vmdprefixcmd="rlwrap -C vmd -c -b(){}[],&^%#;|\\ -f ${MASTERVMDDIR}/vmd_completion.dat "
        set vmdprefixcmd="rlwrap -C vmd -c -f ${MASTERVMDDIR}/vmd_completion.dat "
      else 
#        set vmdprefixcmd="rlwrap -C vmd -c -b(){}[],&^%#;|\\ "
        set vmdprefixcmd="rlwrap -C vmd -c "
      endif
      # indicate that rlwrap is in use to cause VMD to 
      # auto-disable internal line editing features since rlwrap is active
      setenv VMDRLWRAPINUSE 1
    endif
  endif
endif

Basicamente, comente as duas linhas indicadas colocando um # na frente delas e acrescente as outras duas embaixo de cada uma, respectivamente.

O problema está na flag -b, seguida pela expressão regular -b(){}[],&^%#;|\\ , é só suprimí-las e o VMD funcionará normalmente no Debian.

O aviso aparenta ser um problema do CSH, que não consegue interpretar a expressão regular, por isso o aviso rlwrap: No match, ou seja, rlwrap: não combina, não corresponde.

Entrei no arquivo /usr/bin/rlwrap para encontrar a correspondência da expressão, porém, o mesmo é um arquivo binário e como não tem necessidade destrinchá-lo, encontrei a solução nesse link (http://www.ks.uiuc.edu/Research/vmd/mailing_list/vmd-l/19158.html).

O rlwrap (readline wrapper) executa um comando especifico, interceptando a entrada do usuário a fim de fornecer a edição de uma linha, a história persistente e a conclusão. Resumindo, o rlwrap, grosso modo, faz com que o comando vmd seja devidamente interpretado no terminal, sendo que a execução do VMD se dá de forma completa, mesmo com as alterações feitas.

Maiores informações:

# man rlwrap

Faça as alterações, salve, saia do arquivo e execute:

# vmd

... que deverão abrir as janelas do VMD.

Enjoy.

Para remover, entre nos diretórios:

/usr/local/bin e /usr/local/lib.

Delete a pasta vmd, em cada um deles.

E instale uma nova versão, caso queira.