This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
wiki:advanced:x2gohtmlclient [2021/12/31 18:35] mikep Write introduction |
wiki:advanced:x2gohtmlclient [2022/10/03 13:34] (current) gratuxri [proof of concept installation on Ubuntu GNU/Linux from Launchpad PPA] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | |||
====== Introduction ====== | ====== Introduction ====== | ||
Line 8: | Line 7: | ||
* the CGI, JSON, Encode, Expect, and File::Touch Perl modules, and | * the CGI, JSON, Encode, Expect, and File::Touch Perl modules, and | ||
* python-websockify. | * python-websockify. | ||
- | X2Go provides instructions for configuring the NGINX web server, but users can substitute | + | X2Go provides instructions for configuring the NGINX web server, but you can substitute |
+ | |||
+ | {{: | ||
====== Components ====== | ====== Components ====== | ||
- | ===== X2GoHTMLClient | + | ===== x2gohtmlclient |
- | ==== index.html | + | Contains the JavaScript and other assets that are served to a browser. The main page is '' |
- | Client HTML page. This page can be modified or embedded in existing webpage. It has two modes: native client and embedded client. | + | * the X2Go server |
- | < | + | * a username, |
- | X2Go Server | + | * a password, |
- | Username | + | * the desktop environment |
- | Password | + | * whether to use an SSH proxy, |
- | Command | + | * an optional proxy username, and |
- | SSH Proxy (if not specified no proxy will be used) | + | * an optional proxy password. |
- | Proxy login | + | |
- | Proxy password | + | |
- | </ | + | |
- | The HTML page can be modified to predefine one or more of this settings. Important functions inside of this page should be defined: | + | |
- | < | + | |
- | function getUname() | + | |
- | function getPass() | + | |
- | function getCommand() | + | |
- | function getName() | + | |
- | function getProxy() | + | |
- | function getProxyUser() | + | |
- | function getProxyPass() | + | |
- | </ | + | |
- | ==== x2gokdriveclient.html ==== | + | |
- | The HTML Page to run X2Go client in separate window. By default the session' | + | |
- | ==== CSS/ | + | {{: |
- | WEB styles for HTML pages | + | |
- | ==== SRC/*png SRC/*svg ==== | + | '' |
- | Image resources | + | The file '' |
- | ==== SRC/x2godomcontroller.js | + | The x2gohtmlclient package also provides CSS, images, and three JavaScript classes: |
- | Communication | + | - '' |
- | ==== SRC/x2gohtmlclient.js | + | |
- | Communication | + | |
- | ==== SRC/x2gokdrivehtmlclient.js | + | |
- | X2GoKdrive JS client | + | |
- | ===== x2gorpc.cgi | + | ===== x2gowebrpc |
- | CGI script | + | |
+ | The x2gorpc.cgi | ||
===== x2gowswrapper ===== | ===== x2gowswrapper ===== | ||
- | The application which is connecting TCP sockets of X2GoKdrive agent with web sockets for HTML Client. | ||
- | |||
- | |||
- | ====== Building ====== | ||
- | |||
- | ====== JS classes ====== | ||
- | JS classes should be compiled in one using script minify.sh. The resulting file x2goclient.js will be placed in subdir " | ||
- | |||
- | ====== x2gowswrapper ====== | ||
- | Build using qmake | ||
- | < | ||
- | $qmake-qt5 && make | ||
- | </ | ||
- | |||
- | ====== Installation ====== | ||
- | Prerequements: | + | The x2gowswrapper program connects the TCP sockets |
- | Example of nginx configuration (in this case with fcgiwrap https:// | + | ====== Configuring the Web Server ====== |
- | ''/ | + | We describe how to configure NGINX and fcgiwrap, but you can substitute any web server that provides the needed features. |
+ | Here is an example NGINX configuration: | ||
< | < | ||
server { | server { | ||
listen 443 ssl; | listen 443 ssl; | ||
server_name your_host; | server_name your_host; | ||
- | ssl_certificate | + | ssl_certificate |
- | ssl_certificate_key | + | ssl_certificate_key |
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256: | ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256: | ||
ssl_protocols TLSv1.2; | ssl_protocols TLSv1.2; | ||
Line 93: | Line 63: | ||
location /assets/ { | location /assets/ { | ||
add_header Strict-Transport-Security " | add_header Strict-Transport-Security " | ||
- | add_header Content-Security-Policy " | + | add_header Content-Security-Policy " |
add_header Feature-Policy " | add_header Feature-Policy " | ||
add_header Referrer-Policy " | add_header Referrer-Policy " | ||
Line 100: | Line 70: | ||
} | } | ||
- | location ~* \.(pl|cgi)$ { | + | |
- | gzip off; | + | gzip off; |
- | include / | + | include / |
- | fastcgi_pass | + | fastcgi_pass |
} | } | ||
- | location ~ ^/ | + | |
- | proxy_pass | + | proxy_pass |
- | proxy_set_header Upgrade $http_upgrade; | + | proxy_set_header Upgrade $http_upgrade; |
- | proxy_set_header Connection " | + | proxy_set_header Connection " |
- | proxy_http_version 1.1; | + | proxy_http_version 1.1; |
- | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | + | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
- | proxy_set_header Host $http_host; | + | proxy_set_header Host $http_host; |
- | proxy_intercept_errors on; | + | proxy_intercept_errors on; |
- | proxy_redirect off; | + | proxy_redirect off; |
- | proxy_cache_bypass $http_upgrade; | + | proxy_cache_bypass $http_upgrade; |
- | proxy_set_header X-Real-IP $remote_addr; | + | proxy_set_header X-Real-IP $remote_addr; |
- | proxy_set_header X-NginX-Proxy true; | + | proxy_set_header X-NginX-Proxy true; |
- | proxy_ssl_session_reuse off; | + | proxy_ssl_session_reuse off; |
} | } | ||
} | } | ||
</ | </ | ||
+ | Note that the location ''/ | ||
- | X2Go HTML client files: | + | ====== Building and Installing ====== |
- | < | + | |
- | <WEB ROOT>/ | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | </code> | + | ===== x2gohtmlclient ===== |
+ | |||
+ | Run '' | ||
+ | The output will be '' | ||
+ | |||
+ | The other assets should be installed as follows. Create the parent directories as required. | ||
+ | * Place '' | ||
+ | * Place '' | ||
+ | * Place '' | ||
+ | |||
+ | ===== x2gowebrpc ===== | ||
+ | |||
+ | Copy '' | ||
- | This location can be changed, in this case the changes should be also done in the WEB Server configuration file and in index.html file: | + | ===== x2gowswrapper ===== |
+ | |||
+ | Build x2gowswrapper using qmake: | ||
< | < | ||
- | var RPC_path="/ | + | $ qmake-qt5 && make |
- | var asset_path="/ | + | |
</ | </ | ||
- | x2gorpc.cgi should be executable | + | Install the resulting program named x2gowswrapper to ''/ |
- | install x2gowswrapper to /usr/bin | + | Create the directory '' |
- | x2gowswarpper configuration: | + | Create the file named '' |
- | + | <code> | |
- | / | + | |
- | <file> | + | |
ws_proto=wss | ws_proto=wss | ||
- | ssl_cert=<your SSL cert> | + | ssl_cert=/ |
- | ssl_key=<your SSL cert key> | + | ssl_key=/ |
ssl_only=true | ssl_only=true | ||
log_dir=/ | log_dir=/ | ||
- | </file> | + | </code> |
- | the SSL key should be same which used for WEB server. | + | Ensure |
+ | and ensure the user running NGINX can read the files at both paths as well as the configuration file itself. | ||
- | Because x2gowswrapper is started from CGI, be sure that config and SSL Certs are accessible for web server user (www-data in debian) | + | ===== proof of concept installation on Debian GNU/Linux ===== |
- | create log directory for x2gowswarpper: | ||
< | < | ||
- | #mkdir / | + | sudo apt install extrepo |
- | #chown www-data / | + | sudo extrepo enable x2go |
+ | sudo apt update | ||
+ | sudo apt install x2gohtmlclient | ||
</ | </ | ||
- | to use x2go HTML client open in web browser: | + | ===== proof of concept installation on Ubuntu GNU/Linux from Launchpad PPA ===== |
< | < | ||
- | https://<your host>/ | + | sudo add-apt-repository ppa:x2go/nightly |
+ | sudo add-apt-repository ppa:x2go/ppa | ||
+ | sudo apt update | ||
+ | sudo apt install x2gohtmlclient | ||
</ | </ | ||
- | |||
- | {{: | ||
- | {{: | ||
- |