إدارة أجهزة الكمبيوتر عن بُعد متعددة عبر HTTP5
الإنجليزية 中文
يساعدك البرامج المدفوعة مثل TeamViewer على التحكم في أجهزة الكمبيوتر المتعددة عن بعد. WebPC تكمل وظائف مماثلة وهي مجانية ومفتوحة المصدر تمامًا. في الوقت نفسه ، تستخدم WebPC بالكامل للمتصفحات الحديثة وتحتاج فقط إلى استخدام المتصفح للتحكم عن بُعد عن جهاز الكمبيوتر الخاص بك عن بُعد دون تثبيت برامج تحكم إضافية.
يحتوي WebPC بشكل أساسي على الخصائص التالية:



إن شعبية معدات الكمبيوتر والتطوير السريع للشبكة تجعل التشغيل البعيد لأجهزة الكمبيوتر أكثر وأكثر ضرورة وشائعة. يمكن لـ SSH و RDP التحكم في جهاز مع شبكة IP خارجية مستقلة ، ولكل منها مزايا وعيوب خاصة به. الخدمات التي توفر الإدارة عن بُعد والتحكم في أجهزة متعددة مثل TeamViewer غير مناسبة للمستخدمين غير التجاريين. وعادة ما يوفر سطح المكتب عن بُعد فقط ولكن القشرة البعيدة للأجهزة والأجهزة الأخرى عادة ما تكون أكثر فائدة وكفاءة. بالإضافة إلى ذلك ، من المزعج تثبيت برنامج التحكم عن بُعد مزعج. لذلك قمت بفرز الاحتياجات المذكورة أعلاه ، وأدركت جميع وظائف العملاء في المتصفح هو هذا المشروع WebPC.
أولاً ، مطلوب خادم لتلقي طلبات المستخدم وتسجيل النهاية التي يتم التحكم فيها. نسمي هذا الخادم السيد ، وجميع الأطراف التي يتم التحكم فيها هي عبيد.
سوف يسجل العبد نفسه مع Master ويحافظ على قناة الشبكة الافتراضية للسيد. يوفر Salve خدمات GRPC إلى Master على قناة الشبكة الافتراضية هذه لدعم وظائف التحكم عن بُعد المختلفة.
عندما يتلقى السيد طلب المستخدم ، يجد العبد المسجل ويقوم بإعادة توجيه الطلب إلى العبد.
بالنسبة إلى Linux-AMD64 و Windows-AMD64 ، تم توفير برامج مبللة مسبقًا ، يرجى تنزيل وتثبيت مباشرة. بالنسبة للمنصات الأخرى ، تحتاج إلى تجميع بنفسك ، والإشارة إلى ما يلي للتثبيت.
قم بتنزيل أحدث برنامج وفك ضغطه على/opt/webpc/webpc
copy /opt/webpc/webpc-master.service to /etc/systemd/system/webpc-master.service لتثبيت الخدمة الرئيسية لـ SystemD
sudo cp /opt/webpc/webpc-master.service /etc/systemd/system/webpc-master.service
إذا قمت بتعديل دليل التثبيت ، تذكر تعديل المسار المقابل في WebPC-Master.service
إنشاء مستخدم WebPC
sudo useradd webpc -Mrs /sbin/nologin
تشغيل الخدمة
sudo systemctl start webpc-master.service
يمكن الحصول على اسم المستخدم وكلمة المرور العشوائية التي تم إنشاؤها بواسطة النظام من ./var/logs/master/webpc.log بعد المدى الأول:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
قم بتنزيل أحدث برنامج وفك ضغطه على/opt/webpc/webpc
copy /opt/webpc/webpc-slave.service to /etc/systemd/system/webpc-slave.service لتثبيت خدمة الرقيق لـ SystemD
sudo cp /opt/webpc/webpc-slave.service /etc/systemd/system/webpc-slave.service
إذا قمت بتعديل دليل التثبيت ، تذكر تعديل المسار المقابل في WebPC-slave.service
إنشاء مستخدم WebPC
sudo useradd webpc -Mrs /sbin/nologin
تشغيل الخدمة
sudo systemctl start webpc-slave.service
يمكن الحصول على اسم المستخدم وكلمة المرور العشوائية التي تم إنشاؤها بواسطة النظام من ./var/logs/master/webpc.log بعد المدى الأول:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
يحدد http.libsonnet كيف يوفر Master خدمات موقع الويب
local def = import "def.libsonnet";
local size = def.Size;
local duration = def.Duration;
{
// http addr
Addr: ':9000',
// if not empty use https
CertFile: '',
KeyFile: '',
// enable swagger-ui on /document/
Swagger: true,
// grpc server option
Option: {
WriteBufferSize: 32*size.KB,
ReadBufferSize: 32*size.KB,
InitialWindowSize: 0*size.KB, // < 64k ignored
InitialConnWindowSize: 0*size.KB, // < 64k ignored
MaxRecvMsgSize: 0, // <1 6mb
MaxSendMsgSize: 0, // <1 math.MaxInt32
MaxConcurrentStreams: 0,
ConnectionTimeout: 120 * duration.Second,
Keepalive: {
MaxConnectionIdle: 0,
MaxConnectionAge: 0,
MaxConnectionAgeGrace: 0,
Time: 0,
Timeout: 0,
},
},
}
System.Libsonnet يعرّف السيد نفسه بأنه عبدا للتسجيل في نفسه لتوفير جهاز التحكم عن بُعد ، ويمكن للمستخدمين الذين لديهم فقط أذونات الجذر أو الخادم التحكم في الماجستير
Connect.libsonnet إعداد حيث يمكن للمحطة التي يتم التحكم فيها تسجيل نفسها. تحتاج إلى إضافة جهاز تحكم عن بعد إلى خدمة الويب أولاً ، ونسخ العنوان المسجل وملء سمة عنوان URL لهذا الملف
local def = import "def.libsonnet";
local size = def.Size;
local duration = def.Duration;
{
// http addr
URL: 'ws://127.0.0.1:9000/api/v1/dialer/64048031f73a11eba3890242ac120064',
// if true allow insecure server connections when using SSL
// Insecure: true,
// grpc server option
Option: {
WriteBufferSize: 32*size.KB,
ReadBufferSize: 32*size.KB,
InitialWindowSize: 0*size.KB, // < 64k ignored
InitialConnWindowSize: 0*size.KB, // < 64k ignored
MaxRecvMsgSize: 0, // <1 6mb
MaxSendMsgSize: 0, // <1 math.MaxInt32
MaxConcurrentStreams: 0,
ConnectionTimeout: 120 * duration.Second,
Keepalive: {
MaxConnectionIdle: 0,
MaxConnectionAge: 0,
MaxConnectionAgeGrace: 0,
Time: 0,
Timeout: 0,
},
},
}
System.Libsonnet يحدد الوظائف التي سيوفرها العبد
{
//Shell : "shell-linux", // if empty, linux default value shell-linux.sh
//Shell : "shell-windows.bat", // if empty, windows default value shell-windows.bat
// vnc server address
VNC: "127.0.0.1:5900",
// mount path to web
Mount: [
{
// web display name
Name: "s_movie",
// local filesystem path
Root: "/home/dev/movie",
// Set the directory to be readable. Users with read/write permissions can read files
Read: true,
// Set the directory to be writable. Users with write permission can write files
// If Write is true, Read will be forcibly set to true
Write: true,
// Set as a shared directory to allow anyone to read the file
// If Shared is true, Read will be forcibly set to true
Shared: true,
},
{
Name: "s_home",
Root: "/home/dev",
Write: true,
Read: true,
Shared: false,
},
{
Name: "s_root",
Root: "/",
Write: false,
Read: true,
Shared: false,
},
{
Name: "s_media",
Root: "/media/dev/",
Write: false,
Read: true,
Shared: false,
},
],
}
يستخدم WebPC الخلفي تطوير Golang و GRPC ، ويستخدم الواجهة الأمامية التطور الزاوي ، ويجب تجميعه بشكل منفصل.
قم بتثبيت غزل بيئة التطوير اللازمة
قم بتنزيل المشروع وقم بتبديل دليل العمل إلى WebPC/View
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
تثبيت تبعيات المشروع
yarn install
أو
npm install
تجميع الرمز الأمامي
../build.sh view
تثبيت بيئة التطوير اللازمة GCC GOLANG PROTO3 GRPC protoc-gen-go protoc-gen-grpc-gateway protoc-gen-openapiv2
قم بتنزيل المشروع وقم بتبديل دليل العمل إلى WebPC
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
إنشاء رمز GRPC
./build.sh grpc
تضمين الكود الأمامي والملفات الثابتة في رمز Golang
./build.sh view -s
ترجمة رمز GO
./build.sh go
توجد جميع المستخدمين والمحطات التي يتم التحكم فيها في WebPC تحت عقدة مجموعة الأشجار. عندما تكون مجموعة المستخدم هي عقدة الأجداد للمجموعة حيث تنتمي المحطة التي يتم التحكم فيها ، يمكن للمستخدم التحكم في المحطة التي يتم التحكم فيها.
تحدد الأذونات العمليات التي يمكن للمستخدم تنفيذها تشمل التعاريف التالية: