LibVNCServer: ไลบรารีสำหรับการปรับใช้เซิร์ฟเวอร์ VNC อย่างง่ายดาย ลิขสิทธิ์ (C) 2001-2003 โยฮันเนส อี. ชินเดลิน
หากคุณมีคำถามทั่วไป วิธีที่ดีที่สุดคือถามในการแชทของชุมชน หากคุณกังวลเกี่ยวกับข้อบกพร่องหรือคำขอคุณสมบัติแทน โปรดใช้เครื่องมือติดตามปัญหา
หากคุณใช้ LibVNCServer อยู่แล้ว คุณอาจต้องการอ่านข่าว
VNC คือชุดโปรแกรมที่ใช้โปรโตคอล RFB (Remote Frame Buffer) ได้รับการออกแบบมาเพื่อ "ส่งออก" เฟรมบัฟเฟอร์ผ่านเน็ต: คุณตั้งค่าเซิร์ฟเวอร์และสามารถเชื่อมต่อผ่านโปรแกรมดู VNC หากเซิร์ฟเวอร์รองรับ WebSockets (ซึ่ง LibVNCServer ทำ) คุณยังสามารถเชื่อมต่อโดยใช้โปรแกรมดู VNC ในเบราว์เซอร์เช่น noVNC
มีการใช้งานอย่างกว้างขวางในการดูแลระบบ แต่การตั้งโปรแกรมเซิร์ฟเวอร์ด้วยตัวเองไม่ใช่เรื่องง่าย
สิ่งนี้ได้รับการเปลี่ยนแปลงโดย LibVNCServer
หน้าแรกมีรายการเบื้องต้นของโครงการทั้งหมดที่ใช้ LibVNCServer หรือ LibVNClient หรือทั้งสองอย่าง
ชื่อ | ตัวเลข | LibVNCServer | LibVNCClient |
---|---|---|---|
ไม่มี | 1 | ||
การรับรองความถูกต้อง VNC | 2 | ||
SASL | 20 | ||
MSLogon | 0xfffffffa | ||
แอปเปิ้ล รพ | 30 | ||
ทลส | 18 | ||
VeNCrypt | 19 | ||
UltraVNC MSLogonII | 113 |
ชื่อ | ตัวเลข | LibVNCServer | LibVNCClient |
---|---|---|---|
ดิบ | 1 | ||
คัดลอกRect | 2 | ||
ร.ร | 3 | ||
CoRRE | 4 | ||
เฮกซ์ไทล์ | 5 | ||
ซลิบ | 6 | ||
แน่น | 7 | ||
อัลตร้า | 9 | ||
TRLE | 15 | ||
ซ.ร.ล | 16 | ||
ไซร์เล | 17 | ||
PNG แน่น | -260 |
ชื่อ | LibVNCServer | LibVNCClient |
---|---|---|
อาร์เอฟบี | ||
RFB ที่เข้ารหัสผ่าน VeNCrypt | ||
RFB ที่เข้ารหัสผ่าน AnonTLS | ||
เว็บซ็อกเก็ต | ||
เว็บซ็อกเก็ตที่เข้ารหัส |
LibVNCServer ใช้ CMake ซึ่งคุณสามารถดาวน์โหลดได้ที่นี่ หรือที่ดีกว่านั้นคือติดตั้งโดยใช้ตัวจัดการแพ็คเกจของแพลตฟอร์มของคุณ (apt, yum, brew, macports, chocolatey ฯลฯ)
จากนั้นคุณสามารถสร้างผ่าน:
mkdir build
cd build
cmake ..
cmake --build .
การสนับสนุน Crypto ใน LibVNCClient และ LibVNCServer สามารถใช้แบ็กเอนด์ที่แตกต่างกัน:
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)การสนับสนุน Transport Layer Security ใน LibVNClient และ LibVNCServer สามารถใช้:
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)สำหรับตัวอย่างที่ครอบคลุมเพิ่มเติมซึ่งรวมถึงการติดตั้งการขึ้นต่อกัน โปรดดูการตั้งค่าการสร้าง Unix CI และ Windows CI
ดูhttps://developer.android.com/ndk/guides/cmake.htmlเป็นข้อมูลอ้างอิง แต่โดยพื้นฐานแล้วมันอยู่ที่:
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
ทดสอบกับ MinGW-w64 บน Debian ซึ่งคุณควรติดตั้งผ่าน sudo apt install mingw-w64
คุณสามารถใช้ toolchainfile ที่ให้มาได้ โดยจะตั้งค่า CMake ให้คาดหวัง (เป็นทางเลือก) การพึ่งพา win32 เช่น libjpeg และเพื่อนในไดเร็กทอรี deps
โปรดทราบว่าคุณต้องการแพ็คเกจการพัฒนา (อาจสร้างเอง) สำหรับ win32 แพ็คเกจ -dev
ที่มาพร้อมกับการแจกจ่ายของคุณจะใช้งานไม่ได้ โปรดทราบว่าคุณจะต้องใส่ libwinpthread-1.dll
ใน build dir เพื่อเรียกใช้ตัวอย่าง คุณสามารถค้นหา DLL นี้บนเครื่องสร้าง Linux ของคุณผ่าน locate libwinpthread-1.dll
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
ดูเอกสารแนะนำ LibVNCServer API สำหรับวิธีสร้างอินสแตนซ์เซิร์ฟเวอร์ เชื่อมโยงตัวจัดการอินพุต และจัดการเคอร์เซอร์
ในกรณีที่คุณต้องการเรียนรู้ LibVNCServer ตามตัวอย่าง โปรดดูที่เซิร์ฟเวอร์ในไดเร็กทอรี example/server
สำหรับ LibVNCClient สามารถดูตัวอย่างได้ใน example/client
กระบวนการติดตั้งจะติดตั้งไฟล์ pkg-config .pc สำหรับ LibVNCServer รวมถึง LibVNCClient ซึ่งคุณสามารถใช้ในระบบบิลด์ของคุณผ่าน pkg-config --cflags libvncserver
et al ตามปกติ
หากใช้ CMake, LibVNCServer เวอร์ชัน > 0.9.13 ให้ไฟล์กำหนดค่า CMake ดังนั้นใน CMakeLists.txt ของโปรเจ็กต์ของคุณ คุณสามารถพูดได้ว่า:
find_package (LibVNCServer)
if (LibVNCServer_FOUND)
# libs and headers location are now accessible via properties, but you only
# need to add the respective export target to your project's target_link_libraries,
# cmake will automatically add libs and headers
# eg: add client (YOUR_PROJECT_TARGET being a placeholder for your real target -
# it must be defined by add_executable or add_library):
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncclient)
# add server:
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncserver)
endif ()
คุณสามารถลองใช้การสนับสนุน websockets ในตัวได้โดยเริ่มต้นเซิร์ฟเวอร์ตัวอย่างจากไดเร็กทอรี webclients ผ่าน ../examples/example
example สิ่งสำคัญคือต้อง ไม่ เริ่มจากภายในไดเร็กทอรี examples
ไม่เช่นนั้นโปรแกรมเซิร์ฟเวอร์จะไม่พบไฟล์ดัชนี HTTP โปรแกรมเซิร์ฟเวอร์จะบอก URL ให้คุณทราบเพื่อชี้เว็บเบราว์เซอร์ของคุณไป ที่นั่น คุณสามารถคลิกที่ปุ่ม noVNC เพื่อเชื่อมต่อโดยใช้โมดูลย่อย git ของโปรแกรมดู noVNC (สามารถติดตั้งได้ผ่าน git submodule update --init
)
หากคุณยังไม่มีใบรับรอง SSL ที่เบราว์เซอร์ของคุณเชื่อถือ วิธีที่สะดวกสบายที่สุดในการสร้างใบรับรองคือการใช้ minica บน distros ที่ใช้ Debian คุณสามารถติดตั้งผ่าน sudo apt install minica
บน MacOS ผ่าน brew install minica
ไปที่ไดเร็กทอรี webclients และสร้างใบรับรองโฮสต์และ CA ผ่าน:
cd webclients
minica -org "LibVNC" $(hostname)
เชื่อถือใบรับรองในเบราว์เซอร์ของคุณโดยการนำเข้า cacert.crt
ที่สร้างขึ้น เช่น สำหรับ Firefox ให้ไปที่ Options->ความเป็นส่วนตัวและความปลอดภัย->ดูใบรับรอง->อำนาจ และนำเข้า cacert.crt
ที่สร้างขึ้น ทำเครื่องหมายที่ช่องทำเครื่องหมายเพื่อใช้สำหรับการเชื่อถือเว็บไซต์ สำหรับเบราว์เซอร์อื่น กระบวนการจะคล้ายกัน
จากนั้น คุณก็สามารถเริ่มต้นเซิร์ฟเวอร์ตัวอย่างได้ในที่สุด โดยมอบคีย์โฮสต์และใบรับรองที่สร้างขึ้น:
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
โปรแกรมเซิร์ฟเวอร์จะบอก URL ให้คุณทราบเพื่อชี้เว็บเบราว์เซอร์ของคุณไป ที่นั่น คุณสามารถคลิกที่ปุ่มการเชื่อมต่อที่เข้ารหัส noVNC เพื่อเชื่อมต่อโดยใช้โปรแกรมดู noVNC ที่รวมมาด้วย โดยใช้การเชื่อมต่อ Websockets ที่เข้ารหัส
หากการเชื่อมต่อไคลเอ็นต์-เซิร์ฟเวอร์ของคุณช้าเนื่องจากลิงก์ 'ช้า' มีบางสิ่งที่ต้องพิจารณา
ก่อนอื่น คุณต้องตรวจสอบว่าลิงก์ของคุณมีปริมาณงานต่ำหรือมีเวลาแฝงสูงหรือทั้งสองอย่าง
สำหรับลิงก์ที่มีเวลาแฝงสูง ให้ลองขอให้อัปเดต framebuffer อย่างต่อเนื่อง เนื่องจาก RFB เป็นแบบดึงไคลเอ็นต์ตามค่าเริ่มต้น ไม่ใช่แบบพุชแบบเซิร์ฟเวอร์ คุณสามารถดูตัวอย่างการใช้งานได้ที่นี่ และจะช่วยปรับปรุงการตอบสนองได้อย่างแน่นอน
นอกจากนี้ยังมีส่วนขยาย RFB แบบต่อเนื่องด้วย แต่ LibVNC นั้นยังไม่รองรับ (ยัง)
หากลิงก์ของคุณมีปริมาณงานต่ำ โดยทั่วไปคุณจะต้องลดจำนวนไบต์ที่ถูกส่งต่อการอัพเดตเฟรมบัฟเฟอร์:
ในช่วงเริ่มต้นของโปรเจ็กต์นี้ Dscho ซึ่งเป็นผู้เขียนต้นฉบับ อยากให้เป็นใบอนุญาต BSD อย่างไรก็ตาม มันขึ้นอยู่กับโค้ด GPL จำนวนมาก ดังนั้นจึงต้องเป็น GPL
พนักงานที่ AT&T ทำงานได้ดีมากในการผลิตสิ่งที่สะอาดและไร้ไขมันพอๆ กับ VNC ผู้จัดการตัดสินใจว่าเพื่อชื่อเสียงของพวกเขา พวกเขาจะปล่อยโปรแกรมนี้ให้ฟรี แต่ไม่เพียงเท่านั้น! พวกเขาตระหนักว่าการปล่อยโค้ดฟรีจะทำให้ VNC กลายเป็นเด็กน้อยที่มีการพัฒนา พิชิตโลกใหม่ และทำให้พ่อแม่ภูมิใจมาก พวกเขาก็ทำได้! เพื่อปกป้องนวัตกรรมนี้ พวกเขาจึงตัดสินใจสร้างเป็น GPL ไม่ใช่ BSD ข้อแตกต่างหลักคือ: คุณสามารถสร้างโปรแกรมโอเพนซอร์สที่มาจาก BSD ไม่ใช่จาก GPL คุณต้องให้เครดิตที่เหมาะสมกับทั้งสองอย่าง
ผลิตภัณฑ์เชิงพาณิชย์ของเราต้องการใช้ LibVNCServer เพื่อสร้างเซิร์ฟเวอร์ VNC ของเราเองและแจกจ่าย สิ่งนี้จะถือเป็นงานลอกเลียนแบบในบริบท GPLv2 หรือไม่
ใช่. โปรดทราบว่าแม้ว่าคุณจะต้องยึดติดกับ GPL สำหรับโปรแกรมของคุณหากคุณลิงก์ไปยัง LibVNCServer/LibVNClient คุณไม่จำเป็นต้องเปิดเผยโค้ดของคุณต่อสาธารณะ ในกรณีที่คุณใช้งานอนุพันธ์ภายในองค์กรของคุณ ดู https://www .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
การแก้ไขโค้ด LibVNCServer หรือไม่สร้างความแตกต่างในการพิจารณาว่าเซิร์ฟเวอร์ VNC ของเราจะถือว่าเป็นผลงานลอกเลียนแบบหรือไม่?
ไม่ เพียงลิงก์ไปยัง LibVNCServer/LibVNCClient โปรแกรมของคุณจะกลายเป็นงานลอกเลียนแบบ
โปรแกรมนี้เป็นซอฟต์แวร์ฟรี คุณสามารถแจกจ่ายซ้ำและ/หรือแก้ไขได้ภายใต้เงื่อนไขของ GNU General Public License ตามที่เผยแพร่โดย Free Software Foundation เวอร์ชัน 2 ของใบอนุญาต หรือ (ตามตัวเลือกของคุณ) เวอร์ชันที่ใหม่กว่า
โปรแกรมนี้เผยแพร่ด้วยความหวังว่าจะมีประโยชน์ แต่ไม่มีการรับประกันใดๆ โดยไม่มีการรับประกันโดยนัยถึงความสามารถในการซื้อขายหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดูใบอนุญาตสาธารณะทั่วไปของ GNU สำหรับรายละเอียดเพิ่มเติม
คุณควรได้รับสำเนาของ GNU General Public License พร้อมกับโปรแกรมนี้ หากไม่มี โปรดติดต่อ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA