Кіріспе

x11vnc – виртуалды желілік есептеу (VNC) серверлік бағдарламасы. Ол қашықтан клиентке X Window сессиясын және x11vnc бағдарламалық жасақтамасын орнатқан компьютерге қашықтан қол жеткізуге мүмкіндік береді, X серверінің фрейм буферін өзгерістерге үнемі тексеріп отырады. Бұл пайдаланушыға өздерінің X11 жұмыс үстелін (KDE, GNOME, Xfce және т.б.) қашықтанғы компьютерден басқаруға мүмкіндік береді, бұл пайдаланушының жеке желісінде немесе Интернет арқылы, тіпті пайдаланушы оның алдында отырғандай сезінуге мүмкіндік береді. x11vnc сонымен қатар веб-камералар, теледидар тюнерлік карталары, iPAQ, Neuros OSD, Linux консолі және Mac OS X графикалық дисплейі сияқты X11 емес фрейм буферлік құрылғыларын да тексеріп отырады. x11vnc LibVNCServer жобасының бір бөлігі болып табылады. x11vnc пайдаланушыға кіру паролін орнатуға немесе Unix пайдаланушы аты мен паролін пайдалануға мүмкіндік беретін қауіпсіздік мүмкіндіктерімен жабдықталған. Сонымен қатар, SSL арқылы қосылу опциясы да бар.

Сауалнама алгоритмі

x11vnc X серверінің фрейм буферінің көшірмесін RAM-да сақтайды. X11 бағдарламалау интерфейсі XShmGetImage фрейм буферінен пиксельдік деректерді алу үшін қолданылады. x11vnc X серверінің фрейм буферін өзінің көшірмесімен салыстырып, қандай пиксел аймақтары өзгергенін (соның салдарынан VNC көрермендеріне жіберілуі керек) анықтайды. Физикалық фрейм буферінен пиксельдік деректерді оқу, оған дерек жазудан әлдеқайда баяу болуы мүмкін (графикалық құрылғылар оқуға оңтайландырылмағандықтан), сондықтан пикселдерді біртіндеп тексеру көбінесе тым ұзаққа созылады. Жағдайды жақсарту үшін x11vnc 32 пиксел араласқан толық қатарларды тік бағытта оқиды. Экранның төменгі жағына жеткенде, ол жоғары жағынан сәл басқа ауытқумен қайта бастайды. Осылай 32 рет өткесімен, ол бүкіл экранды қамтиды. Бұл әдіс x11vnc-ге экрандағы өзгерістерді тізбектеп тексеруге қарағанда шамамен 32 есе жылдам анықтауға мүмкіндік береді (егер өзгерістер өте кішкентай болмаса, мысалы, бір пиксел биіктігінде). Егер X11 DAMAGE кеңейтімі қолданысқа енгізілсе, x11vnc оны тексеруді қайда бағыттау керектігі туралы ақпарат беру үшін пайдаланады, осылайша өзгерістерді одан да жылдам тауып, жүйеге түсетін жүктемені азайтады.

Кіріспе инъекция

x11vnc пайдаланушы енгізу оқиғаларын (пернелерді басу, көрсеткіштің қозғалысы және көрсеткіш түймешіктерін басу) VNC көрушісінен алғанда, оларды синтетикалық түрде X серверіне жіберуі керек. Бұл үшін XTEST кеңейтуінің XTestFakeKeyEvent, XTestFakeMotionEvent және XTestFakeButtonEvent X11 бағдарламалау интерфейстері қолданылады. X11 басқарылмайтын құрылғылар үшін (мысалы, Mac OS X графикалық дисплейі) басқа бағдарламалау интерфейстерін пайдалану қажет. x11vnc сондай-ақ пайдаланушыға өздерінің енгізу бағдарламасын қосуға мүмкіндік беретін интерфейсті ұсынады.

Қызықты қолдану

Көп жағдайда арнайы мақсаттағы жүйелер графикалық дисплейді басқару үшін X терезесі жүйесін қолданып құрастырылады. x11vnc жүйенің дисплейін VNC арқылы қашықтан қол жеткізу үшін экспорттауға пайдаланылады. Бұл арнайы мақсаттағы жүйені қашықтан бақылауға, басқаруға және ақауларды жоюға мүмкіндік береді. Кейде бұл алысқа техник жіберу қажеттігін жояды немесе пайдаланушыларға жабдықты жұмыс орнынан немесе ноутбуктан басқаруға мүмкіндік береді. x11vnc келесі типтегі жүйелерде жұмыс істегені белгілі: электрондық микроскоптар, МРТ және радиологиялық бейнелерді талдау жүйелері, электр стансалары мен мұнай платформаларын басқару консольдары, материалдарды таратуды басқару, кемелердің өзін-өзі қорғау жүйесін сынау, ЯМР жүйелері, кремний пластинкаларды талдау микроскоптары және театрлар мен концерттердегі жарықтандыруды басқару. x11vnc Linux негізіндегі PDA және үй кинотеатры компьютерлері сияқты кіріктірілген жүйелерде X11 дисплейлерін экспорттау үшін қолданылады. Егер x11vnc арнайы мақсаттағы жүйеде іске қосылмайтын болса, кейде оны жақын жердегі компьютерде іске қосып, X серверінің кадрлық буферін желі арқылы сұрап алуға болады. Осылайша, x11vnc арқылы X терминалды құрылғыларға қол жеткізуге болады.

Xvnc эмуляциясы

x11vnc негізгі қолданылысы физикалық графикалық жабдықпен байланысты X серверлері үшін болғанымен, ол Xvfb немесе Sun Ray сессиясы сияқты виртуалды X серверлеріне (олардың кадрлық буферлері тек RAM-да ғана сақталады) қосылуға да қабілетті. x11vnc-де Xvfb-ді автоматты түрде, тіркелген Unix пайдаланушысы ретінде іске қосуға арналған опциялар бар (create және svc). x11vnc пен Xvfb-нің өзара әрекеттесу жылдамдығы Xvnc-ге қарағанда төмен болуы мүмкін, бірақ бұл режим Xvnc-де қолжетпес мүмкіндіктерді, мысалы SSL шифрлау және Unix пайдаланушы аты мен құпия сөзді қамтамасыз етеді.

Клиент жағындағы кэштеу

RFB (VNC) протоколы X11 және RDP сияқты басқа желілік графикалық протоколдармен салыстырғанда ерекше, себебі пиксельдік деректерді көруші тарапында сақтауға арналған ешқандай мүмкіндік қарастырылмаған. Бұл клиенттің іске асырылуын жеңілдетсе де, жылдам жауап беру тұрғысынан төлеуге дайын болу керек. Мысалы, терезе немесе фондық аймақтың әр қайта көрсетілуі үшін оның (сығылған) пиксельдік деректері желі арқылы қайта жіберілуі тиіс. Бұл әсер әсіресе жиі иконаланған және иконасы алынған немесе қайта көрсетілетін күрделі немесе фотосуреттері бар терезелерде (мысалы, веб-браузер терезесі) байқалады. x11vnc клиенттік жақта сақтаудың тәжірибелік және біршама күшті әдісін ұсынады. Ол ncache опциясы арқылы қосылады. Осы режимде RFB кадр буферін құру кезінде x11vnc нақты (экрандағы) пиксельдік деректер үшін пайдаланылатын жоғарғы бөліктен төмен, өте үлкен қосалқы аймақты бөледі. x11vnc RFB CopyRect командасын пайдаланып, көрушіге пиксельдік деректердің тіктөртбұрыштарын қосалқы аймаққа және одан шығаруға нұсқау береді. Бұл операциялар көруші тарапында жергілікті түрде орындалады. Осылайша x11vnc қосалқы аймақты басқаруға және пиксельдік деректерді желі арқылы қайта жібермей сақтауға және алуға мүмкіндік алады. x11vnc клиенттік жақтағы сақтау режимі көптеген операциялар үшін жауап беру жылдамдығын айтарлықтай жақсарта алады. Бұл схема RFB CopyRect командасын пайдаланатындықтан, кез келген (өзгертілмеген) VNC көрушісімен жұмыс істейді. Дегенмен, кейбір кемшіліктері бар. Біріншісі, ол көп көлемде жадты қажет етеді. Жақсы өнімділік үшін нақты экраннан 10-20 есе үлкен қосалқы аймақ пайдаланылуы керек. Демек, 1280x1024 truecolor кадр буфері үшін 5 МБ пайдаланудың орнына, шамамен 100 МБ қолданылады (VNC клиенті және сервер тарапында). Бұл қазіргі заманғы компьютерлер үшін үлкен мәселе емес, бірақ аз жады бар құрылғыда мүмкін емес. Екіншісі, VNC көрушісі қосалқы аймақты пайдаланушыны шатастыруы мүмкін, мысалы, оны пайдаланушыға көрсету немесе егер тышқан нақты экранның төменгі жағына жетсе, автоматты түрде оған қарай жылжу. SSVNC-дегі Unix VNC көрушісі қосалқы аймақты автоматты түрде жасырады. Соңында, x11vnc терезелердегі пиксельдік деректерді сақтау және қайта пайдалану бойынша қолданатын эвристикасы толыққанды емес және терезе мазмұнының күтпеген жыпылықтауына және басқа да жағымсыз әсерлерге әкелуі мүмкін.