Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ricardodeazambuja/83e72af63c4a1013e8f742d91d5a7ab3 to your computer and use it in GitHub Desktop.
Save ricardodeazambuja/83e72af63c4a1013e8f742d91d5a7ab3 to your computer and use it in GitHub Desktop.
Use google colab as a remote machine with the help of ngrok, vnc server and xface desktop you can change the configurations and desktop environment as you please it's just a start
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "colab_xface_vnc",
"version": "0.3.2",
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/ahmedengu/9c04165fc303aebc8a5a2360234b28bf/colab_xface_vnc.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"metadata": {
"id": "jPXzrd3sbE8I",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"* Enable colab GPU\n",
"* Set ngrok auth below\n",
"* Run all"
]
},
{
"metadata": {
"id": "Uys7SO6pOod_",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 217
},
"outputId": "56b71ba8-af90-4b4b-dbe3-dbbe2db3d716"
},
"cell_type": "code",
"source": [
"# install xface\n",
"!apt install xfce4 xfce4-goodies\n",
"# install vnc server\n",
"!apt install vnc4server\n",
"# install ngrok\n",
"! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip\n",
"! unzip -qq -n ngrok-stable-linux-amd64.zip\n",
"\n",
"# configure\n",
"!printf \"#!/bin/bash\\nstartxfce4 &\" > ~/.vnc/xstartup\n",
"!chmod +x ~/.vnc/xstartup"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": [
"Reading package lists... Done\n",
"Building dependency tree \n",
"Reading state information... Done\n",
"xfce4 is already the newest version (4.12.4).\n",
"xfce4-goodies is already the newest version (4.12.4).\n",
"0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.\n",
"Reading package lists... Done\n",
"Building dependency tree \n",
"Reading state information... Done\n",
"vnc4server is already the newest version (4.1.1+xorg4.3.0-37.3ubuntu2).\n",
"0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "GUcnbVDyPbU4",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
},
"outputId": "f6f7037f-9037-4615-81dc-ca7dfe491575"
},
"cell_type": "code",
"source": [
"# set the password, max 8 chars\n",
"!vncpasswd"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"Password:\n",
"Verify:\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "J9tPozpmRf2l",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 318
},
"outputId": "07e1e138-d3f1-4566-da29-47a8efe5e821"
},
"cell_type": "code",
"source": [
"# set ngrok auth and run forever\n",
"NGROK_AUTH = \"\"\n",
"VNC_PORT = 5901\n",
"\n",
"from time import sleep\n",
"from IPython.display import clear_output\n",
"import requests\n",
"import json\n",
"\n",
"# keep everything running\n",
"i=0\n",
"while True:\n",
" try:\n",
" # start vnc server\n",
" if len(get_ipython().getoutput('ps -ef | grep vnc')) <= 2:\n",
" get_ipython().system_raw('vnc4server -httpport $VNC_PORT &')\n",
" sleep(5)\n",
" \n",
" ngrok_link = json.loads(requests.get('http://localhost:4040/api/tunnels').text)['tunnels'][0]['public_url']\n",
" print(ngrok_link)\n",
" sleep(30)\n",
" requests.get(ngrok_link)\n",
" except (KeyboardInterrupt, SystemExit):\n",
" raise\n",
" except:\n",
" # create ngrok port\n",
" get_ipython().system_raw('./ngrok authtoken $NGROK_AUTH && ./ngrok tcp $VNC_PORT &')\n",
" i+=1\n",
" if i >=5:\n",
" clear_output(wait=True)\n",
" i=0\n"
],
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"text": [
"tcp://0.tcp.ngrok.io:10721\n",
"tcp://0.tcp.ngrok.io:10721\n",
"tcp://0.tcp.ngrok.io:10721\n"
],
"name": "stdout"
},
{
"output_type": "error",
"ename": "KeyboardInterrupt",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-6-a9abdbc36a9f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mngrok_link\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjson\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloads\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'http://localhost:4040/api/tunnels'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'tunnels'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'public_url'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mngrok_link\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m30\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mngrok_link\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSystemExit\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment