{"id":21,"date":"2025-11-20T07:17:04","date_gmt":"2025-11-20T07:17:04","guid":{"rendered":"https:\/\/www.aliburaksan.com\/blog\/?p=21"},"modified":"2025-11-22T03:53:53","modified_gmt":"2025-11-22T03:53:53","slug":"python-ile-vnc-yapimi","status":"publish","type":"post","link":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/","title":{"rendered":"Python ile VNC Yap\u0131m\u0131"},"content":{"rendered":"<p>Uzak sunucularla \u00e7al\u0131\u015f\u0131rken, \u00f6zellikle de bir GUI&#8217;ye ihtiyac\u0131n\u0131z oldu\u011funda, SSH bazen yetersiz kal\u0131r. Ekran payla\u015f\u0131ml\u0131 bir ortam kurmak i\u00e7in RDP gibi ticari \u00e7\u00f6z\u00fcmlere para vermek istemedi\u011fimiz veya TeamViewer gibi kapal\u0131 kaynak yaz\u0131l\u0131mlara g\u00fcvenmedi\u011fimiz durumlar oluyor. \u0130\u015fte tam da bu noktada, y\u0131llard\u0131r beni bir\u00e7ok s\u0131k\u0131nt\u0131dan kurtarm\u0131\u015f olan VNC devreye giriyor. &#8220;Yeni ba\u015flayanlar i\u00e7in Python ile VNC server yap\u0131m\u0131&#8221; derken, asl\u0131nda Python&#8217;\u0131 bir VNC sunucusunu kurmak, yap\u0131land\u0131rmak ve y\u00f6netmek i\u00e7in nas\u0131l bir ara\u00e7 olarak kullanabilece\u011fimizden bahsedece\u011fim. S\u0131f\u0131rdan bir VNC protokol\u00fc yazmak de\u011fil amac\u0131m; bu, yeni ba\u015flayanlar i\u00e7in de\u011fil, doktora tezi konusu olur.<\/p>\n<p>Kendi kariyerimde, \u00f6zellikle h\u0131zl\u0131ca bir test ortam\u0131 kurmam gerekti\u011finde veya bir geli\u015ftiricinin GUI tabanl\u0131 bir araca eri\u015fmesi gerekti\u011finde, VNC benim i\u00e7in her zaman pratik bir \u00e7\u00f6z\u00fcm olmu\u015ftur. Ancak, VNC&#8217;nin kendi ba\u015f\u0131na getirdi\u011fi g\u00fcvenlik ve y\u00f6netim zorluklar\u0131 da cabas\u0131. \u0130\u015fte bu y\u00fczden, Python&#8217;\u0131n esnekli\u011fini kullanarak bu s\u00fcreci nas\u0131l otomatize edip daha g\u00fcvenli hale getirebilece\u011finizi g\u00f6sterece\u011fim.<\/p>\n<h2>VNC Nedir ve Perde Arkas\u0131nda Neler D\u00f6ner?<\/h2>\n<p>VNC (Virtual Network Computing), temel olarak bir uzak bilgisayar\u0131n grafiksel masa\u00fcst\u00fcn\u00fc ba\u015fka bir bilgisayara aktaran bir sistemdir. Bunu yaparken, Remote Framebuffer (RFB) protokol\u00fcn\u00fc kullan\u0131r. RFB, asl\u0131nda \u00e7ok basit bir mant\u0131kla \u00e7al\u0131\u015f\u0131r: Sunucu taraf\u0131ndaki ekran\u0131n piksel verilerini al\u0131r, s\u0131k\u0131\u015ft\u0131r\u0131r ve istemciye g\u00f6nderir. \u0130stemci de bu pikselleri kendi ekran\u0131nda g\u00f6sterir. \u0130stemciden gelen fare ve klavye hareketleri de sunucuya geri g\u00f6nderilir.<\/p>\n<p>Peki, bu i\u015fin Python ile ne alakas\u0131 var? Ben genelde Python&#8217;\u0131, mevcut VNC sunucu yaz\u0131l\u0131mlar\u0131n\u0131 (<code>x11vnc<\/code>, <code>TigerVNC<\/code>, <code>TightVNC<\/code> gibi) ba\u015flatmak, durdurmak, konfig\u00fcre etmek ve hatta durumlar\u0131n\u0131 izlemek i\u00e7in bir orkestrasyon arac\u0131 olarak kullan\u0131yorum. RFB protokol\u00fcn\u00fcn kendisi de basit bir yap\u0131ya sahip olsa da, s\u0131f\u0131rdan bir implementasyon yazmak \u00e7ok zaman al\u0131r. Benim gibi pratik d\u00fc\u015f\u00fcnen bir IT Uzman\u0131, tekerle\u011fi yeniden icat etmek yerine, zaten \u00e7al\u0131\u015fan bir \u00e7\u00f6z\u00fcm\u00fc kendi ihtiya\u00e7lar\u0131na g\u00f6re \u015fekillendirmeyi tercih eder.<\/p>\n<p>VNC, genellikle 5900&#8217;den ba\u015flayan portlar\u0131 kullan\u0131r. \u00d6rne\u011fin, ilk VNC oturumu 5901 (display :1), ikincisi 5902 (display :2) \u015feklinde devam eder. Bu display numaralar\u0131, VNC sunucusunun arka planda hangi X sunucusu oturumunu y\u00f6netece\u011fini belirler. Sunucu taraf\u0131nda, bir VNC oturumu ba\u015flat\u0131ld\u0131\u011f\u0131nda, asl\u0131nda bir sanal X sunucusu (<code>Xvfb<\/code> gibi) veya mevcut bir X sunucusu (<code>x11vnc<\/code> durumunda) bir portta dinlemeye ba\u015flar ve ekran g\u00fcncellemelerini bekler.<\/p>\n<p><strong>Dezavantajlar\u0131 ve Benim Ele\u015ftirilerim:<\/strong> VNC&#8217;nin en b\u00fcy\u00fck sorunu, RFB protokol\u00fcn\u00fcn kendisinin varsay\u0131lan olarak \u015fifreleme sunmamas\u0131d\u0131r. Yani, VNC trafi\u011fini do\u011frudan internete a\u00e7mak, resmen intihard\u0131r. Ka\u00e7 kez loglarda \u00c7in&#8217;den, Rusya&#8217;dan gelen binlerce brute-force denemesi g\u00f6rd\u00fc\u011f\u00fcm\u00fc hat\u0131rlam\u0131yorum bile. Bant geni\u015fli\u011fi t\u00fcketimi de ayr\u0131 bir dert. Y\u00fcksek \u00e7\u00f6z\u00fcn\u00fcrl\u00fckl\u00fc bir ekran\u0131 VNC \u00fczerinden payla\u015ft\u0131\u011f\u0131n\u0131zda, a\u011f\u0131n\u0131z\u0131n can\u0131na okuyabilirsiniz. Modern RDP veya Spice gibi protokoller, bu konularda VNC&#8217;ye g\u00f6re fersah fersah \u00f6ndedir. VNC&#8217;yi hala kullan\u0131yorsam, bu genellikle eski bir sistemle u\u011fra\u015ft\u0131\u011f\u0131m ya da \u00e7ok basit bir GUI eri\u015fimine ihtiyac\u0131m oldu\u011fu i\u00e7indir; yoksa RDP varken kim u\u011fra\u015f\u0131r?<\/p>\n<h2>Uygulama: Python ile Basit Bir VNC Sunucusu Kurulumu<\/h2>\n<p>\u015eimdi gelelim i\u015fin prati\u011fine. Ben burada <code>x11vnc<\/code> kullanaca\u011f\u0131m \u00e7\u00fcnk\u00fc mevcut bir X oturumunu payla\u015fmak i\u00e7in olduk\u00e7a esnek ve hafif bir ara\u00e7. Ama\u00e7, Python ile bu kurulumu ve y\u00f6netimi otomatize etmek.<\/p>\n<h3>1. Gerekli Paketlerin Kurulumu<\/h3>\n<p>\u00d6ncelikle, bir Linux sunucusu (benim favorim Ubuntu Server) \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z\u0131 varsayal\u0131m. SSH ile sunucunuza ba\u011flan\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nsudo apt update # Paket listelerini g\u00fcnceller\nsudo apt install -y x11vnc xvfb xserver-xorg-core xfonts-base xterm openbox # Gerekli VNC ve X bile\u015fenlerini kurar\nsudo apt install -y python3-pip # Python pip paket y\u00f6neticisini kurar (e\u011fer y\u00fckl\u00fc de\u011filse)\npip install psutil # Python'da s\u00fcre\u00e7 y\u00f6netimi i\u00e7in kullanaca\u011f\u0131m\u0131z k\u00fct\u00fcphane\n<\/code><\/pre>\n<p><code>x11vnc<\/code>, mevcut bir X sunucusunu payla\u015f\u0131r. E\u011fer bir masa\u00fcst\u00fc ortam\u0131 y\u00fckl\u00fc de\u011filse, <code>xvfb<\/code> (X Virtual Framebuffer) ile sanal bir X sunucusu olu\u015fturup onun \u00fczerinden VNC sa\u011flayabiliriz. Ben genellikle sanal bir ortam tercih ederim \u00e7\u00fcnk\u00fc ger\u00e7ek masa\u00fcst\u00fc ortam\u0131n\u0131 payla\u015fmak her zaman iyi bir fikir de\u011fildir.<\/p>\n<h3>2. VNC \u015eifresi Belirleme<\/h3>\n<p>VNC, \u015fifresiz ba\u015flaman\u0131za izin verse de, bu \u00f6l\u00fcmc\u00fcl bir hata olur. Ben her zaman \u00f6ncelikle bir \u015fifre belirlerim:<\/p>\n<pre><code>\nx11vnc -storepasswd # VNC ba\u011flant\u0131s\u0131 i\u00e7in bir \u015fifre belirler ve kaydeder\n# Bu komut sizden bir \u015fifre girmenizi isteyecektir. G\u00fc\u00e7l\u00fc bir \u015fifre kullan\u0131n.\n<\/code><\/pre>\n<p>Bu komut, genellikle kullan\u0131c\u0131n\u0131n ev dizininde <code>.vnc\/passwd<\/code> dosyas\u0131na \u015fifreyi kaydeder.<\/p>\n<h3>3. Python ile VNC Sunucusunu Y\u00f6netme<\/h3>\n<p>\u015eimdi, VNC sunucusunu ba\u015flatmak ve durdurmak i\u00e7in basit bir Python scripti yazal\u0131m. Bu script, <code>x11vnc<\/code>&#8216;yi bir <code>xvfb<\/code> oturumu \u00fczerinde ba\u015flatacak ve belirli bir portta dinleyecek.<\/p>\n<pre><code>\n# vnc_manager.py\nimport subprocess\nimport os\nimport time\nimport psutil # S\u00fcre\u00e7leri y\u00f6netmek i\u00e7in kullanaca\u011f\u0131z\n\n# --- Yap\u0131land\u0131rma ---\nVNC_DISPLAY = \":1\" # VNC oturumunun display numaras\u0131\nVNC_PORT = 5901 # VNC istemcilerinin ba\u011flanaca\u011f\u0131 port (5900 + display numaras\u0131)\nVNC_GEOMETRY = \"1280x800\" # Sanal ekran\u0131n \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc\nVNC_PASSWORD_FILE = os.path.expanduser(\"~\/.vnc\/passwd\") # VNC \u015fifre dosyas\u0131n\u0131n yolu\nVNC_LOG_FILE = os.path.expanduser(\"~\/vncserver.log\") # VNC sunucusunun log dosyas\u0131\nXTERM_CMD = \"xterm -geometry 80x24+10+10 -fg white -bg black\" # Ba\u015flat\u0131lacak terminal uygulamas\u0131\n\ndef is_vnc_running():\n    \"\"\"Belirtilen VNC portunda bir s\u00fcrecin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol eder.\"\"\"\n    for proc in psutil.process_iter(['pid', 'name', 'cmdline']):\n        try:\n            cmdline = \" \".join(proc.cmdline())\n            if \"x11vnc\" in cmdline and VNC_DISPLAY in cmdline:\n                print(f\"VNC sunucusu zaten \u00e7al\u0131\u015f\u0131yor (PID: {proc.pid}).\")\n                return True\n        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):\n            pass\n    return False\n\ndef start_vnc_server():\n    \"\"\"VNC sunucusunu ba\u015flat\u0131r.\"\"\"\n    if is_vnc_running():\n        return\n\n    print(f\"VNC sunucusunu ba\u015flat\u0131l\u0131yor (Display: {VNC_DISPLAY}, Port: {VNC_PORT})...\")\n\n    # Sanal X sunucusunu (Xvfb) ba\u015flat\n    xvfb_command = [\n        \"Xvfb\", VNC_DISPLAY,\n        \"-screen\", \"0\", f\"{VNC_GEOMETRY}x24\", # 24 bit renk derinli\u011fi\n        \"-ac\", # Eri\u015fim kontrol\u00fcn\u00fc devre d\u0131\u015f\u0131 b\u0131rak (g\u00fcvenlik i\u00e7in dikkatli olun)\n        \"-listen\", \"tcp\" # TCP ba\u011flant\u0131lar\u0131na izin ver\n    ]\n    # xvfb_process = subprocess.Popen(xvfb_command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) # Arka planda \u00e7al\u0131\u015ft\u0131r\n    # Ben genelde loglar\u0131 g\u00f6rmek i\u00e7in bir s\u00fcre ekrana basar\u0131m, sonra DEVNULL yapar\u0131m.\n    xvfb_process = subprocess.Popen(xvfb_command, stdout=open(VNC_LOG_FILE, \"a\"), stderr=subprocess.STDOUT)\n    time.sleep(2) # Xvfb'nin ba\u015flamas\u0131 i\u00e7in biraz bekle\n\n    # x11vnc sunucusunu ba\u015flat\n    vnc_command = [\n        \"x11vnc\",\n        \"-display\", VNC_DISPLAY, # Hangi X display'ini payla\u015faca\u011f\u0131n\u0131 belirtir\n        \"-rfbport\", str(VNC_PORT), # Hangi portta dinleyece\u011fini belirtir\n        \"-passwdfile\", VNC_PASSWORD_FILE, # \u015eifre dosyas\u0131n\u0131 belirtir\n        \"-forever\", # Sunucu kapanana kadar \u00e7al\u0131\u015f\n        \"-usepw\", # \u015eifre kullanmaya zorla\n        \"-loop\", # Ba\u011flant\u0131 kesilirse yeniden ba\u015flatmaya \u00e7al\u0131\u015f\n        \"-noxdamage\", # Performans i\u00e7in XDamage uzant\u0131s\u0131n\u0131 kapat\n        \"-logfile\", VNC_LOG_FILE, # Log dosyas\u0131n\u0131 belirtir\n        \"-bg\" # Arka planda \u00e7al\u0131\u015ft\u0131r\n    ]\n\n    # x11vnc'yi ba\u015flat ve hemen ard\u0131ndan bir terminal a\u00e7\n    # Ben genelde VNC oturumu a\u00e7\u0131ld\u0131\u011f\u0131nda bir terminalin otomatik a\u00e7\u0131lmas\u0131n\u0131 isterim.\n    # Bu, oturumun \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmenin en kolay yoludur.\n    x11vnc_process = subprocess.Popen(vnc_command + [\"-create\", \"-env\", f\"DISPLAY={VNC_DISPLAY}\", XTERM_CMD])\n    \n    # x11vnc_process = subprocess.Popen(vnc_command, stdout=open(VNC_LOG_FILE, \"a\"), stderr=subprocess.STDOUT)\n\n    print(f\"VNC sunucusu ba\u015flat\u0131ld\u0131. Loglar: {VNC_LOG_FILE}\")\n    print(f\"Ba\u011flanmak i\u00e7in: vncviewer localhost:{VNC_PORT} (SSH t\u00fcneli ile!)\")\n\ndef stop_vnc_server():\n    \"\"\"VNC sunucusunu durdurur.\"\"\"\n    print(\"VNC sunucusunu durduruluyor...\")\n    found_processes = False\n    for proc in psutil.process_iter(['pid', 'name', 'cmdline']):\n        try:\n            cmdline = \" \".join(proc.cmdline())\n            if \"x11vnc\" in cmdline and VNC_DISPLAY in cmdline:\n                print(f\"x11vnc s\u00fcreci bulunup sonland\u0131r\u0131l\u0131yor (PID: {proc.pid})...\")\n                proc.terminate()\n                found_processes = True\n            elif \"Xvfb\" in cmdline and VNC_DISPLAY in cmdline:\n                print(f\"Xvfb s\u00fcreci bulunup sonland\u0131r\u0131l\u0131yor (PID: {proc.pid})...\")\n                proc.terminate()\n                found_processes = True\n        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):\n            pass\n    \n    if not found_processes:\n        print(\"\u00c7al\u0131\u015fan VNC sunucusu bulunamad\u0131.\")\n    else:\n        print(\"VNC sunucusu durduruldu.\")\n\nif __name__ == \"__main__\":\n    import sys\n    if len(sys.argv) &gt; 1:\n        if sys.argv[1] == \"start\":\n            start_vnc_server()\n        elif sys.argv[1] == \"stop\":\n            stop_vnc_server()\n        else:\n            print(\"Kullan\u0131m: python3 vnc_manager.py [start|stop]\")\n    else:\n        print(\"Kullan\u0131m: python3 vnc_manager.py [start|stop]\")\n\n<\/code><\/pre>\n<p>Bu scripti <code>vnc_manager.py<\/code> olarak kaydedin. Ard\u0131ndan, a\u015fa\u011f\u0131daki komutlarla kullanabilirsiniz:<\/p>\n<pre><code>\npython3 vnc_manager.py start # VNC sunucusunu ba\u015flat\u0131r\npython3 vnc_manager.py stop # VNC sunucusunu durdurur\n<\/code><\/pre>\n<p>Bu script, <code>Xvfb<\/code> ile sanal bir X sunucusu olu\u015fturur ve <code>x11vnc<\/code>&#8216;yi bu sanal sunucu \u00fczerinden ba\u015flat\u0131r. Ayr\u0131ca, VNC oturumu ba\u015flad\u0131\u011f\u0131nda otomatik olarak bir <code>xterm<\/code> penceresi a\u00e7ar, bu da bana sunucunun ger\u00e7ekten \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6steren iyi bir i\u015farettir.<\/p>\n<h3>4. VNC \u0130stemcisi ile Ba\u011flanma (<strong>\u00c7OK \u00d6NEML\u0130!<\/strong>)<\/h3>\n<p>Yukar\u0131da da bahsetti\u011fim gibi, VNC trafi\u011fini do\u011frudan internete a\u00e7mak \u00e7ok tehlikelidir. Ben projelerimde her zaman SSH t\u00fcnelleme kullan\u0131r\u0131m. Bu, VNC trafi\u011finizin \u015fifreli bir SSH ba\u011flant\u0131s\u0131 \u00fczerinden ge\u00e7mesini sa\u011flar.<\/p>\n<p>Yerel bilgisayar\u0131n\u0131zda (VNC istemcisini \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z yerde) a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nssh -L 5901:localhost:5901 kullaniciadi@sunucu_ipadresi # Yerel 5901 portunu sunucunun 5901 portuna t\u00fcneller\n<\/code><\/pre>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, yerel makinenizdeki herhangi bir VNC istemcisi (TigerVNC Viewer, RealVNC Viewer gibi) ile <code>localhost:5901<\/code> adresine ba\u011flanabilirsiniz. Bu sayede, VNC trafi\u011finiz SSH t\u00fcneli \u00fczerinden g\u00fcvenli bir \u015fekilde aktar\u0131lm\u0131\u015f olur.<\/p>\n<h2>&#8220;Best Practices&#8221; ve Klasik Hatalar<\/h2>\n<p>VNC kurarken s\u0131k\u00e7a yap\u0131lan baz\u0131 hatalar\u0131 ve benim bu konudaki \u00f6nerilerimi payla\u015fmak isterim:<\/p>\n<ul>\n<li><strong>VNC&#8217;yi Do\u011frudan \u0130nternete A\u00e7mak:<\/strong> Daha \u00f6nce de s\u00f6yledim, bu intihard\u0131r. VNC&#8217;nin \u015fifrelemesi zay\u0131ft\u0131r veya yoktur. E\u011fer SSH t\u00fcnelleme yapam\u0131yorsan\u0131z, en az\u0131ndan bir VPN arkas\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131n. G\u00fcvenlik duvar\u0131n\u0131zda sadece SSH (22) portunu a\u00e7\u0131k b\u0131rak\u0131n.<\/li>\n<li><strong>Zay\u0131f \u015eifre Kullanmak veya \u015eifresiz B\u0131rakmak:<\/strong> Bu da ayr\u0131 bir rezalettir. Bir\u00e7ok ki\u015fi &#8220;nas\u0131l olsa i\u00e7eride kullan\u0131yorum&#8221; diyerek \u015fifre koymuyor. Ama network&#8217;\u00fcn\u00fczdeki herhangi bir zafiyet, bu oturuma kolayca eri\u015fime yol a\u00e7ar. Her zaman g\u00fc\u00e7l\u00fc, karma\u015f\u0131k \u015fifreler kullan\u0131n.<\/li>\n<li><strong>Ayn\u0131 VNC Oturumunu Birden Fazla Kullan\u0131c\u0131ya Payla\u015ft\u0131rmak:<\/strong> Her kullan\u0131c\u0131ya kendi display&#8217;ini (\u00f6rne\u011fin :1, :2) atay\u0131n. Aksi takdirde, bir kullan\u0131c\u0131n\u0131n yapt\u0131\u011f\u0131 di\u011ferini etkiler ve i\u015fler kar\u0131\u015f\u0131r. Benim scriptimde tek bir display kullan\u0131yoruz ama bunu \u00e7o\u011faltmak \u00e7ok zor de\u011fil.<\/li>\n<li><strong>Performans Ayarlar\u0131n\u0131 G\u00f6z Ard\u0131 Etmek:<\/strong> VNC varsay\u0131lan olarak bazen \u00e7ok fazla bant geni\u015fli\u011fi t\u00fcketebilir. <code>x11vnc<\/code> gibi ara\u00e7lar <code>-compresslevel<\/code> ve <code>-quality<\/code> gibi parametreler sunar. Ben genelde test ortamlar\u0131nda en d\u00fc\u015f\u00fck kaliteyle ba\u015flar, e\u011fer g\u00f6rsel kalite ger\u00e7ekten gerekliyse yava\u015f yava\u015f y\u00fckseltirim. &#8220;Her pikselin \u00f6nemi yoksa, neden yava\u015f \u00e7al\u0131\u015fal\u0131m ki?&#8221; derim.<\/li>\n<li><strong>VNC Servisinin Otomatik Ba\u015flamamas\u0131 veya \u00d6l\u00fcnce Aya\u011fa Kalkmamas\u0131:<\/strong> Yukar\u0131daki Python scripti manuel \u00e7al\u0131\u015f\u0131r. Ger\u00e7ek bir \u00fcretim ortam\u0131nda veya s\u00fcrekli kullanaca\u011f\u0131n\u0131z bir sunucuda, bu scripti bir <code>systemd<\/code> servisi olarak yap\u0131land\u0131rmal\u0131s\u0131n\u0131z. Bu sayede sunucu yeniden ba\u015flad\u0131\u011f\u0131nda VNC oturumu da otomatik olarak ba\u015flar ve beklenmedik bir hata durumunda yeniden ba\u015flat\u0131lmaya \u00e7al\u0131\u015f\u0131l\u0131r. Benim projelerimde her zaman bir <code>.service<\/code> dosyas\u0131 yazar\u0131m, aksi takdirde unutulur ve sunucu restart olunca &#8220;VNC neden \u00e7al\u0131\u015fm\u0131yor?&#8221; diye soran bir geli\u015ftiriciyle u\u011fra\u015fmak zorunda kal\u0131r\u0131m.<\/li>\n<\/ul>\n<h2>Sonu\u00e7<\/h2>\n<p>VNC, her ne kadar modern uzak masa\u00fcst\u00fc \u00e7\u00f6z\u00fcmlerinin gerisinde kalsa da, basit ve h\u0131zl\u0131 bir uzak masa\u00fcst\u00fc eri\u015fimi i\u00e7in hala i\u015f g\u00f6rebilir bir ara\u00e7t\u0131r. \u00d6zellikle Python gibi bir otomasyon diliyle birle\u015ftirildi\u011finde, benim gibi tembel IT Uzmanlar\u0131 i\u00e7in kurulum ve y\u00f6netim s\u00fcre\u00e7lerini olduk\u00e7a kolayla\u015ft\u0131rabilir. Ancak unutmay\u0131n, g\u00fcvenlik her zaman \u00f6nceliklidir ve SSH t\u00fcnelleme gibi basit ad\u0131mlarla bile VNC deneyiminizi \u00e7ok daha g\u00fcvenli hale getirebilirsiniz. Bir sonraki projenizde, GUI&#8217;ye ihtiya\u00e7 duydu\u011funuzda, VNC&#8217;ye bir \u015fans verin ama her zaman temkinli olun.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>VNC Nedir ve perde arkas\u0131nda neler d\u00f6ner?<br \/>\nPython ile VNC Server yap\u0131m\u0131!<\/p>\n","protected":false},"author":1,"featured_media":127,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37],"tags":[9,10,8],"class_list":["post-21","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-yazilim-otomasyon","tag-python","tag-vnc","tag-vnc-manager"],"blocksy_meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python ile VNC Yap\u0131m\u0131 - Ali Burak \u015ean<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python ile VNC Yap\u0131m\u0131 - Ali Burak \u015ean\" \/>\n<meta property=\"og:description\" content=\"VNC Nedir ve perde arkas\u0131nda neler d\u00f6ner? Python ile VNC Server yap\u0131m\u0131!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Ali Burak \u015ean\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-20T07:17:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-22T03:53:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"abs_administrator45_\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"abs_administrator45_\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/\"},\"author\":{\"name\":\"abs_administrator45_\",\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2\"},\"headline\":\"Python ile VNC Yap\u0131m\u0131\",\"datePublished\":\"2025-11-20T07:17:04+00:00\",\"dateModified\":\"2025-11-22T03:53:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/\"},\"wordCount\":1392,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2\"},\"image\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png\",\"keywords\":[\"python\",\"vnc\",\"vnc manager\"],\"articleSection\":[\"Yaz\u0131l\u0131m &amp; Otomasyon\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/\",\"url\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/\",\"name\":\"Python ile VNC Yap\u0131m\u0131 - Ali Burak \u015ean\",\"isPartOf\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png\",\"datePublished\":\"2025-11-20T07:17:04+00:00\",\"dateModified\":\"2025-11-22T03:53:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage\",\"url\":\"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png\",\"contentUrl\":\"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png\",\"width\":512,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/www.aliburaksan.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python ile VNC Yap\u0131m\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#website\",\"url\":\"https:\/\/www.aliburaksan.com\/blog\/\",\"name\":\"Dijital Nab\u0131z \u2013 IT Haberleri\",\"description\":\"IT, Sistem Y\u00f6netimi ve Teknoloji G\u00fcnl\u00fc\u011f\u00fc\",\"publisher\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.aliburaksan.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2\",\"name\":\"abs_administrator45_\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0f7cbec178a59b3ec0e9b0732417e32803d988a369cc745ef68a7143376120ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0f7cbec178a59b3ec0e9b0732417e32803d988a369cc745ef68a7143376120ab?s=96&d=mm&r=g\",\"caption\":\"abs_administrator45_\"},\"logo\":{\"@id\":\"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/www.aliburaksan.com\/blog\"],\"url\":\"https:\/\/www.aliburaksan.com\/blog\/author\/abs_administrator45_\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python ile VNC Yap\u0131m\u0131 - Ali Burak \u015ean","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/","og_locale":"tr_TR","og_type":"article","og_title":"Python ile VNC Yap\u0131m\u0131 - Ali Burak \u015ean","og_description":"VNC Nedir ve perde arkas\u0131nda neler d\u00f6ner? Python ile VNC Server yap\u0131m\u0131!","og_url":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/","og_site_name":"Ali Burak \u015ean","article_published_time":"2025-11-20T07:17:04+00:00","article_modified_time":"2025-11-22T03:53:53+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png","type":"image\/png"}],"author":"abs_administrator45_","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"abs_administrator45_","Tahmini okuma s\u00fcresi":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#article","isPartOf":{"@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/"},"author":{"name":"abs_administrator45_","@id":"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2"},"headline":"Python ile VNC Yap\u0131m\u0131","datePublished":"2025-11-20T07:17:04+00:00","dateModified":"2025-11-22T03:53:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/"},"wordCount":1392,"commentCount":0,"publisher":{"@id":"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2"},"image":{"@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png","keywords":["python","vnc","vnc manager"],"articleSection":["Yaz\u0131l\u0131m &amp; Otomasyon"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/","url":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/","name":"Python ile VNC Yap\u0131m\u0131 - Ali Burak \u015ean","isPartOf":{"@id":"https:\/\/www.aliburaksan.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage"},"image":{"@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png","datePublished":"2025-11-20T07:17:04+00:00","dateModified":"2025-11-22T03:53:53+00:00","breadcrumb":{"@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#primaryimage","url":"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png","contentUrl":"https:\/\/www.aliburaksan.com\/blog\/wp-content\/uploads\/2025\/11\/vnc-konu-basligi.png","width":512,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/www.aliburaksan.com\/blog\/python-ile-vnc-yapimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/www.aliburaksan.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python ile VNC Yap\u0131m\u0131"}]},{"@type":"WebSite","@id":"https:\/\/www.aliburaksan.com\/blog\/#website","url":"https:\/\/www.aliburaksan.com\/blog\/","name":"Dijital Nab\u0131z \u2013 IT Haberleri","description":"IT, Sistem Y\u00f6netimi ve Teknoloji G\u00fcnl\u00fc\u011f\u00fc","publisher":{"@id":"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.aliburaksan.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/ddc80da203b66794d3a1b568035ff3c2","name":"abs_administrator45_","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0f7cbec178a59b3ec0e9b0732417e32803d988a369cc745ef68a7143376120ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0f7cbec178a59b3ec0e9b0732417e32803d988a369cc745ef68a7143376120ab?s=96&d=mm&r=g","caption":"abs_administrator45_"},"logo":{"@id":"https:\/\/www.aliburaksan.com\/blog\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/www.aliburaksan.com\/blog"],"url":"https:\/\/www.aliburaksan.com\/blog\/author\/abs_administrator45_\/"}]}},"_links":{"self":[{"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":5,"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions\/233"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/media\/127"}],"wp:attachment":[{"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aliburaksan.com\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}