diff --git a/DesktopCoLab.ipynb b/DesktopCoLab.ipynb new file mode 100644 index 0000000..70fb375 --- /dev/null +++ b/DesktopCoLab.ipynb @@ -0,0 +1,209 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-j036FZBO7_O" + }, + "source": [ + "# Desktop@CoLab\n", + "\n", + "**A Linux virtual machine, all in Google's servers.**\n", + "\n", + "_Uses [remocolab](https://urlzs.com/jBN9S) by [demotomohiro](https://urlzs.com/ds5GF)._\n", + "\n", + "---\n", + "\n", + "\n", + "_**Important**: To start a new instance using the same account, please re-set the runtime. Forgetting to do so will cause an error._ \n", + "\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "Uys7SO6pOod_" + }, + "outputs": [], + "source": [ + "# DESKTOP@COLAB\n", + "# Have a Linux virtual machine hosted by Google. \n", + "\n", + "#@title ## Configuration\n", + "class config: \n", + " connection = \"SSH only\" #@param [\"SSH only\", \"VNC\"]\n", + "\n", + " class software: \n", + " #@markdown ##Software \n", + " upgrade_all_binaries = 0 #@param {type:\"slider\", min:0, max:1, step:1}\n", + "\n", + " class storage: \n", + " #@markdown ##Storage\n", + " #@markdown ### Google Drive Storage Integration\n", + " use = 0 #@param {type:\"slider\", min:0, max:1, step:1}\n", + " drive_root = 'My Drive' #@param ['My Drive', 'Shared drives'] \n", + " folder = \"\" #@param {type:\"string\"}\n", + " drive_folder = '/'.join((drive_root, folder)) # Actual Google Drive folder\n", + " mount_point = '' #@param {type:\"string\"}\n", + "\n", + "# actual runtime\n", + "## Import modules. \n", + "import os\n", + "\n", + "## Set formatting.\n", + "class formatting:\n", + " clear = '\\033[0m'\n", + " class color: \n", + " purple = '\\033[95m'\n", + " cyan = '\\033[96m'\n", + " cyan_dark = '\\033[36m'\n", + " blue = '\\033[94m'\n", + " green = '\\033[92m'\n", + " yellow = '\\033[93m'\n", + " red = '\\033[91m'\n", + " class font:\n", + " bold = '\\033[1m'\n", + " underline = '\\033[4m'\n", + "\n", + "## Define screen functions. \n", + "def clear(): \n", + " from IPython.display import clear_output; return clear_output()\n", + "\n", + "class info: # screen messages\n", + " def status(message):\n", + " print(formatting.font.bold + 'Status: \\t' + formatting.clear + message)\n", + " def err(message):\n", + " print(formatting.font.bold + formatting.color.red + 'Error: \\t' + formatting.clear + formatting.clear + message)\n", + " def warning(message):\n", + " print(formatting.font.bold + formatting.color.yellow + 'Warning: \\t' + formatting.clear + formatting.clear + message)\n", + " def success(message):\n", + " print(formatting.font.bold + formatting.color.green + 'Success: \\t' + formatting.clear + formatting.clear + message)\n", + "\n", + "\n", + "#try:\n", + "def mount_GDrive():\n", + " ## Configure storage. \n", + " info.status('Google Drive integration has been enabled! To properly integrate to your Google Drive, please accept the Google Account permission prompts.')\n", + " \n", + " try:\n", + " from google.colab import drive\n", + " info.status('Connecting to Google Driveā€¦')\n", + " drive.mount('/content/drive')\n", + " \n", + " except:\n", + " config.storage.use = 0\n", + " info.error('Google Drive could not be connected.')\n", + " info.status('Google Drive integration has been disabled for this instance. ')\n", + "\n", + " else: \n", + " info.success('Google Drive has been connected.')\n", + " clear()\n", + "\n", + "# Upgrade necessary components. \n", + "def update_components():\n", + " os.system('add-apt-repository ppa:apt-fast/stable -y && apt update && apt install apt-fast -y && apt-fast clean && apt-fast autoremove -y')\n", + "\n", + " if config.software.upgrade_all_binaries:\n", + " info.status('Upgrading all binaries.')\n", + " try:\n", + " if os.system('apt-fast update && apt-fast upgrade -y && apt-fast clean && apt-fast autoremove -y') > 0: raise\n", + " except:\n", + " info.err('An exception has been raised when trying to upgrade one or more of the binaries.')\n", + " else: \n", + " info.success('All binaries have been upgraded!')\n", + "\n", + "def install_remoColab():\n", + " # Install RemoColab. \n", + " info.status('Installing RemoColabā€¦')\n", + " try:\n", + " os.system('pip install git+https://github.com/demotomohiro/remocolab.git')\n", + " import remocolab\n", + " except:\n", + " info.err('Could not install RemoColab.')\n", + " os.kill(os.getpid(), 1)\n", + " else: \n", + " info.success('Successfully installed RemoColab.')\n", + "\n", + "def establish_connection():\n", + " import remocolab\n", + "\n", + " def install_wm():\n", + " # install xfce. \n", + " info.status('Installing XFCE.')\n", + " try:\n", + " if os.system('apt-fast install xfce4 xfce4-terminal -y') > 0: \n", + " if os.system('apt install xfce4 xfce4-terminal -y') > 0: raise\n", + " except:\n", + " info.err('Could not install the XFCE desktop.')\n", + " config.connection = 'SSH only'; info.status('VNC connection will be disabled.')\n", + " else:\n", + " info.success('Successfully installed the XFCE desktop.')\n", + "\n", + " if config.connection == 'VNC': install_wm()\n", + "\n", + " info.status('Setting up ' + config.connection + ' connection. ')\n", + " if config.connection == 'VNC':\n", + " if config.storage.use == 1:\n", + " if config.storage.mount_point != None:\n", + " remocolab.setupVNC(tunnel = \"argotunnel\", mount_gdrive_from = config.storage.drive_folder, mount_gdrive_to = 'Google Drive')\n", + " else: \n", + " remocolab.setupVNC(tunnel = \"argotunnel\", mount_gdrive_from = config.storage.drive_folder, mount_gdrive_to = 'mount_point')\n", + " else:\n", + " remocolab.setupVNC(tunnel = \"argotunnel\")\n", + " info.success('The VNC connection is available at ' + formatting.font.bold + 'vnc://localhost:5901' + formatting.clear + ' unless stated otherwise.')\n", + " else:\n", + " if config.storage.use == 1:\n", + " try:\n", + " if config.storage.mount_point != None:\n", + " remocolab.setupSSHD(tunnel = \"argotunnel\", mount_gdrive_from = config.storage.drive_folder, mount_gdrive_to = 'Google Drive')\n", + " else: \n", + " remocolab.setupSSHD(tunnel = \"argotunnel\", mount_gdrive_from = config.storage.drive_folder, mount_gdrive_to = 'mount_point')\n", + " except:\n", + " remocolab.setupSSHD(tunnel = \"argotunnel\")\n", + " else:\n", + " remocolab.setupSSHD(tunnel = \"argotunnel\")\n", + "\n", + "def main(): \n", + " if config.storage.use: mount_GDrive()\n", + " update_components()\n", + " install_remoColab()\n", + " establish_connection()\n", + "\n", + "main()" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "Desktop@CoLab.ipynb", + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file