גישה גרפית לשרת יוניקס מרוחק

25/03/2021

רוב הפעמים שנצטרך לעשות עבודה על שרת מרוחק נעדיף להשתמש בממשק טקסטואלי כי הוא מהיר ויציב יותר בעבודה ברשת. אבל מדי פעם כן נצטרך לעבוד על תוכנית גרפית או אפילו על שולחן עבודה שלם שרצים על שרת מרוחק. בפוסט זה אציג את שתי הדרכים המרכזיות לעשות את זה.

1. הפעלת תוכנית גרפית בודדת על שרת מרוחק עם X11 Forwarding

גישה ראשונה תעזור לנו להפעיל תוכנית גרפית ספציפית על מכונה שרוב העבודה איתה היא עבודה דרך מסוף טקסטואלי. זה יכול להיות למשל הפעלה של דפדפן על מכונת ג'נקינס כדי לדבג בדיקה מסוימת שנכשלת רק על שרת ה CI, או להשאיר חלון של gvim של המכונה פתוח אצלי על המסך.

תוכנות גרפיות ביוניקס מציגות את הממשק שלהן על מסוף גרפי שנקרא X. בדרך כלל הן מצפות שהמסוף הגרפי הזה ירוץ על המכונה שעליה התוכנית רצה, אבל ל X יש תמיכה מלאה בהצגת הממשק על מכונה אחרת. לכן בשביל להריץ תוכנה גרפית על מכונה מרוחקת נריץ אצלנו שרת X ונבקש מאותה התוכנית שתשלח את פקודות התצוגה שלה לשרת ה X שרץ אצלי על המכונה.

בלינוקס יש לכם כבר שרת X פעיל (זה שרת ה Desktop שלכם) ואפשר להשתמש בו באמצעות האופציה -X לפקודת ה ssh. בדוגמה הבאה אני מתחבר למכונה מרוחקת ברשת המקומית שלי ומפעיל gvim כך ש gvim רץ על המכונה המרוחקת והממשק שלו מוצג אצלי על המסך:

$ ssh -X ynon@192.168.0.113
$ gvim

זה עבד בגלל שפקודת ssh מגדירה משתנה סביבה מיוחד בשם DISPLAY. משתנה זה קובע לתוכניות גרפיות על איזה מסוף להציג את הממשק. נציג את ערך המשתנה כדי לראות שזה עבד:

$ echo $DISPLAY
localhost:10.0

אם אתם עובדים בחלונות תצטרכו להתקין אצלכם שרת X לחלונות לדוגמה את Xming וב putty לסמן את האפשרות X11 Forwarding. לא ניסיתי את זה אבל כאן יש דף הוראות להרפתקנים: https://cat.pdx.edu/platforms/windows/remote-access/xming/.

2. חיבור לשולחן עבודה מלא על שרת מרוחק עם VNC

אומנם X11 Forwarding מצליח להעביר ממשק של תוכנית בודדת למכונה אחרת והוא פיתרון די נוח לתוכניות קטנות, אבל המנגנון אינו Optimised מספיק כדי להריץ שולחן עבודה מלא ולשדר את הממשק דרך הרשת. אם אתם רוצים להציג את כל שולחן העבודה מהמכונה המרוחקת על המכונה שלכם יהיה יעיל יותר להשתמש בפיתרון ייעודי לזה כדוגמת vnc.

פרוטוקול VNC כולל שני חלקים: צד לקוח וצד שרת, ודואג לשדר את המידע הגרפי מהשרת ללקוח ואת הקלט מהלקוח לשרת. לכן על המכונה שנרצה להתחבר אליה יש להתקין את רכיב צד השרת של vnc, לדוגמה על debian זה יהיה:

$ sudo apt-get install tightvncserver

ובצד הלקוח נתקין את תוכנת הצפיה, לדוגמה על ubuntu זה יהיה:

$ sudo apt-get install xtightvncviewer

אתם יכולים למצוא VNC Viewer גם לחלונות למשל תוכנת tightvnc שזמינה בחינם בעמוד הזה: https://www.tightvnc.com/download.php.

אחרי כל ההתקנות נכנסים למכונה אליה רוצים להתחבר ושם מפעילים את ה VNC Server עם:

$ vncserver
New 'X' desktop is ubuntu-s-1vcpu-1gb-ams3-01:1

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/ubuntu-s-1vcpu-1gb-ams3-01:1.log

הפלט לא מספר לנו על איזה פורט הוא מאזין אבל זה כתוב בתוך קובץ ה log, אצלי הופיעה השורה הבאה שם:

24/03/21 18:36:46 Listening for VNC connections on TCP port 5901

אחרי זה הולכים ל VNC Viewer אצלכם על המכונה, מקלידים את כתובת ה IP של השרת ואת הפורט ואתם מחוברים. בסיום כדאי לסגור את השרת עם:

vncserver -kill :1

המספר :1 זה אותו מספר שהופיע בסוף שורת הפלט הראשונה בהפעלה של השרת והוא מייצג את ה DISPLAY עליו השרת רץ.