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)
| İşlem | Komut |
|---|---|
| Başlat | sudo systemctl start vncserver@:1.service |
| Durdur | sudo systemctl stop vncserver@:1.service |
| Yeniden başlat | sudo systemctl restart vncserver@:1.service |
| Durum kontrol | sudo systemctl status vncserver@:1.service |
| Otomatik başlatma | sudo systemctl enable vncserver@:1.service |
| Log görüntüle | sudo journalctl -u vncserver@:1.service -n 20 -f |
ÖNEMLİ:
:1kullanımı (iki nokta üst üste) instance adıdır.:1→ port 5901,:2→ port 5902
🖥️ Display Numaraları ve Portlar
| Instance | Display | Port | Bağlantı |
|---|---|---|---|
vncserver@:1.service | :1 | 5901 | IP:5901 veya IP:1 |
vncserver@:2.service | :2 | 5902 | IP:5902 veya IP:2 |
vncserver@:3.service | :3 | 5903 | IP: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:
%iparametresini 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
| Öğe | Değer |
|---|---|
| IP | hostname -I ile öğren |
| Port | 5901 (display :1 için) |
| Şifre | ~/.config/tigervnc/passwd içinde (binary) |
| Protokol | VNC 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.service | sudo systemctl daemon-reload sonra restart |
Port 5901 already in use | sudo 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.
