Kali’ye VNC Kurmak (Tiger VNC)

Aşağıdaki script’i vnc-install.sh dosyasına kaydedip +x verin. Sunulacak çözünürlüğü GEOMERTY değişkeni ile ayarlayabilirsiniz. Bağlantı parolası olan kali123’ü script içinden değiştirebilirsiniz. Kurulumu gerçekleştirdikten sonra çözünürlüğü değiştirmek için /usr/local/bin/vnc-start.sh dosyasındaki -geometry değerini düzenleyin. Bu betik bir systemd servisi olarak yönetilen VNC’nin başlatma betiğidir.

sudo bash vnc-install.sh
#!/bin/bash
# TigerVNC Hızlı Kurulum Scripti - Kali Linux (Instance-Aware)
# Çalıştır: sudo bash vnc-install.sh

set -e  # Hata durumunda dur

# Değişkenler
USER="kali"
HOME_DIR="/home/$USER"
VNC_DIR="$HOME_DIR/.config/tigervnc"
GEOMETRY="1920x1080"  # veya "1920x1080"
DEPTH="24"

echo "=== TigerVNC Kurulumu Başlıyor ==="

# 1. Paketleri kur
echo "[1/8] Paketler kuruluyor..."
apt update && apt install -y tigervnc-standalone-server tigervnc-viewer xfce4 xfce4-goodies dbus-x11

# 2. Kullanıcı dizinlerini oluştur
echo "[2/8] Dizin yapısı oluşturuluyor..."
mkdir -p "$VNC_DIR"
chown -R "$USER:$USER" "$HOME_DIR/.config"

# 3. VNC şifresi ayarla (otomatik: "kali123")
echo "[3/8] VNC şifresi ayarlanıyor..."
echo "kali123" | vncpasswd -f > "$VNC_DIR/passwd"
chown "$USER:$USER" "$VNC_DIR/passwd"
chmod 600 "$VNC_DIR/passwd"

# 4. xstartup dosyası
echo "[4/8] xstartup dosyası oluşturuluyor..."
cat > "$VNC_DIR/xstartup" << 'EOF'
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export XDG_CURRENT_DESKTOP="XFCE"
export XDG_SESSION_DESKTOP="xfce"
export XDG_SESSION_TYPE="x11"

# Dbus başlat (eğer yoksa)
[ -z "$DBUS_SESSION_BUS_ADDRESS" ] && eval $(dbus-launch --sh-syntax --exit-with-session)

# XFCE başlat
exec startxfce4
EOF
chmod +x "$VNC_DIR/xstartup"
chown "$USER:$USER" "$VNC_DIR/xstartup"

# 5. Instance-aware wrapper script (GÜNCELLENMİŞ)
echo "[5/8] vnc-start.sh betiği oluşturuluyor..."
cat > /usr/local/bin/vnc-start.sh << EOF
#!/bin/bash
# Instance-aware VNC başlatma betiği

USER=$USER
HOME=$HOME_DIR
INSTANCE="\\\${1:-:1}"  # Varsayılan :1

# Instance adını display formatına çevir (\\x3a1 → :1)
DISPLAY=\\\$(echo "\\\$INSTANCE" | sed 's/\\\\x3a/:/g')

export HOME USER DISPLAY

# Eski instance'ı temizle
/usr/bin/vncserver -kill "\\\$DISPLAY" >/dev/null 2>&1 || true
sleep 1

# Log dosyasını temizle
rm -f "\\\$HOME/.config/tigervnc/lenpc\\\${DISPLAY}.log" 2>/dev/null

# VNC'yi başlat
/usr/bin/vncserver "\\\$DISPLAY" -geometry $GEOMETRY -depth $DEPTH -localhost no -xstartup $VNC_DIR/xstartup

# PID kontrolü (systemd PIDFile ile eşleşmeli)
for i in {1..10}; do
    if [ -f "\\\$HOME/.config/tigervnc/lenpc\\\${INSTANCE}.pid" ]; then
        sleep 2
        exit 0
    fi
    sleep 1
done
exit 1
EOF
chmod +x /usr/local/bin/vnc-start.sh

# 6. Instance-aware Systemd servisi (GÜNCELLENMİŞ)
echo "[6/8] Systemd servisi oluşturuluyor..."
cat > /etc/systemd/system/[email protected] << 'EOF'
[Unit]
Description=Start TigerVNC server at startup (display %i)
After=network.target

[Service]
Type=forking
User=kali
Group=kali
WorkingDirectory=/home/kali

Environment="HOME=/home/kali"
Environment="USER=kali"
Environment="PATH=/usr/local/bin:/usr/bin:/bin"

# PIDFile: %i escaped instance adını kullanır (:1 → \x3a1)
PIDFile=/home/kali/.config/tigervnc/lenpc%i.pid

# Betiğe instance adını parametre olarak geçir
ExecStart=/usr/local/bin/vnc-start.sh %i
ExecStop=/usr/bin/vncserver -kill %i

# Yeniden başlatma ayarları
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target
EOF

# 7. Systemd yeniden yükle ve başlat
echo "[7/8] Servis başlatılıyor..."
systemctl daemon-reload

# Eski servis varsa durdur (uyumluluk için)
systemctl stop [email protected] 2>/dev/null || true
systemctl stop vncserver@:1.service 2>/dev/null || true
sleep 1

# --- VNC oturumunu OOM killer'a karşı koru ---
# Uzun çalışan oturumlarda başka bir süreç (örn. Docker konteyneri) ani bellek
# isteyince kernel global OOM tetikler ve genellikle en şişman cgroup olan VNC
# oturumunu öldürür → tüm pencereler/sanal masaüstleri kaybolur. -500 ile VNC
# unit'ini OOM seçim sıralamasında en alta indiriyoruz.
sudo mkdir -p /etc/systemd/system/[email protected]
sudo tee /etc/systemd/system/[email protected]/oom.conf > /dev/null <<'EOF'
[Service]
OOMScoreAdjust=-500
EOF
sudo systemctl daemon-reload

# Yeni servisi etkinleştir ve başlat
systemctl enable vncserver@:1.service
systemctl start vncserver@:1.service

# 8. Durum kontrolü
echo ""
echo "=== KURULUM TAMAMLANDI ==="
echo "VNC Şifresi: kali123"
echo "Bağlantı: <IP>:5901 veya <IP>:1"
echo ""
echo "Servis Durumu:"
systemctl status vncserver@:1.service --no-pager -l | head -10
echo ""
echo "Port Kontrolü:"
ss -tlnp | grep 5901 || echo "Port 5901 henüz açık değil, birkaç saniye bekleyin..."
echo ""
echo "Yönetim Komutları:"
echo "  Başlat:  sudo systemctl start vncserver@:1.service"
echo "  Durdur:  sudo systemctl stop vncserver@:1.service"
echo "  Yeniden: sudo systemctl restart vncserver@:1.service"
echo "  Durum:   sudo systemctl status vncserver@:1.service"
echo ""
echo "Farklı display için: sudo systemctl start vncserver@:2.service (port 5902)"

📁 Yapılandırma Dizini

~/.config/tigervnc/
├── passwd          # VNC şifresi (vncpasswd ile oluşturulur)
├── xstartup        # Masaüstü oturumu başlatma betiği (XFCE)
├── lenpc:1.log     # VNC log dosyası
└── lenpc:1.pid     # PID dosyası (systemd izler)

🚀 Servis Yönetimi (Systemd)

İşlemKomut
Başlatsudo systemctl start vncserver@:1.service
Durdursudo systemctl stop vncserver@:1.service
Yeniden başlatsudo systemctl restart vncserver@:1.service
Durum kontrolsudo systemctl status vncserver@:1.service
Otomatik başlatmasudo systemctl enable vncserver@:1.service
Log görüntülesudo journalctl -u vncserver@:1.service -n 20 -f

ÖNEMLİ::1 kullanımı (iki nokta üst üste) instance adıdır. :1 → port 5901, :2 → port 5902


🖥️ Display Numaraları ve Portlar

InstanceDisplayPortBağlantı
vncserver@:1.service:15901IP:5901 veya IP:1
vncserver@:2.service:25902IP:5902 veya IP:2
vncserver@:3.service:35903IP:5903 veya IP:3

🔧 Temel Komutlar

# VNC şifresini değiştir
sudo -u kali vncpasswd

# Port kontrolü
sudo ss -tlnp | grep 5901

# Çalışan VNC süreçlerini gör
ps aux | grep -i vnc

# Manuel başlat (systemd dışı, önerilmez)
sudo -u kali /usr/local/bin/vnc-start.sh :1

# Zorla temizlik (sıkışınca)
sudo rm -f /home/kali/.config/tigervnc/*.pid /tmp/.X1-lock /tmp/.X11-unix/X1

📜 Wrapper Script

Dosya:/usr/local/bin/vnc-start.sh

  • Instance-aware:%i parametresini alır (:1, :2, vb.)
  • Geometry:3000x1040 (değiştirmek için script’i düzenle)
  • Depth: 24 bit
  • Xstartup:~/.config/tigervnc/xstartup (XFCE başlatır)

🔌 Bağlantı Bilgileri

ÖğeDeğer
IPhostname -I ile öğren
Port5901 (display :1 için)
Şifre~/.config/tigervnc/passwd içinde (binary)
ProtokolVNC Auth + TLSVnc

Bağlantı örnekleri:

vncviewer 192.168.1.100:5901     # Tam port
vncviewer 192.168.1.100:1        # Kısa notasyon
remmina vnc://192.168.1.100:5901  # Remmina ile

🆘 Sık Karşılaşılan Sorunlar

SorunÇözüm
Failed to start vncserver@:1.servicesudo systemctl daemon-reload sonra restart
Port 5901 already in usesudo lsof -i :5901 ile bul ve kill <PID>
Siyah ekran~/.config/tigervnc/xstartup dosyası kontrol et, chmod +x yap
Şifre hatasıvncpasswd ile yeniden oluştur
Systemd takip hatasıPIDFile yolu kontrol et (lenpc%i.pid)

📝 Mimari Hatırlatma

Systemd Instance (%i)    Wrapper Betik          VNC Sunucu
─────────────────────────────────────────────────────────────
vncserver@:1.service  →  vnc-start.sh %i  →  Xtigervnc :1
      ↓                        ↓                    ↓
   ":1" (escaped)          $INSTANCE=":1"      Port 5901
   PIDFile=...%i.pid       DISPLAY=":1"        Desktop

Anahtar: Systemd şablon [email protected], %i ile instance adını (:1) betiğe geçirir. Betik bu değeri DISPLAY değişkenine atar.


🎯 Hızlı Başlangıç (Kopyala-Yapıştır)

# Kurulum sonrası ilk başlatma
sudo systemctl daemon-reload
sudo systemctl enable vncserver@:1.service
sudo systemctl start vncserver@:1.service

# Kontrol
sudo systemctl status vncserver@:1.service --no-pager
sudo ss -tlnp | grep 5901

Not: Bu yapı instance-aware’dir. :1 yerine :2, :3 kullanarak birden fazla bağımsız VNC oturumu açabilirsiniz. Her display kendi portunu (5902, 5903) ve kendi XFCE oturumunu kullanır.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site istenmeyenleri azaltmak için Akismet kullanır. Yorum verilerinizin nasıl işlendiğini öğrenin.