From ea2d7e17f3aa9aabfc84b490a16f97d0e9871ead Mon Sep 17 00:00:00 2001 From: vital987 Date: Tue, 9 Nov 2021 18:00:58 +0000 Subject: [PATCH] Update v1.4.3 --- Dockerfile | 215 +++++++++++++---------------- Dockerfile.heroku | 8 +- README.md | 45 +++--- app.json | 2 +- assets/packages/fluxbox.deb | Bin 875196 -> 867960 bytes assets/screenshots/desktop_ss2.png | Bin 136075 -> 178590 bytes 6 files changed, 130 insertions(+), 140 deletions(-) diff --git a/Dockerfile b/Dockerfile index eb6c688..7fbf65a 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,145 +1,120 @@ FROM ubuntu:20.04 -LABEL AboutImage "Ubuntu20.04_Fluxbox_NoVNC" - LABEL Maintainer "Apoorv Vyavahare " ARG DEBIAN_FRONTEND=noninteractive #VNC Server Password -ENV VNC_PASS="samplepass" \ +ENV VNC_PASS="samplepass" \ #VNC Server Title(w/o spaces) - VNC_TITLE="Vubuntu_Desktop" \ + VNC_TITLE="Vubuntu_Desktop" \ #VNC Resolution(720p is preferable) - VNC_RESOLUTION="1280x720" \ + VNC_RESOLUTION="1280x720" \ #VNC Shared Mode (0=off, 1=on) - VNC_SHARED=0 \ + VNC_SHARED=0 \ #Local Display Server Port - DISPLAY=:0 \ + DISPLAY=:0 \ #NoVNC Port - NOVNC_PORT=$PORT \ -#Ngrok Token (Strictly use private token if using the service) - NGROK_AUTH_TOKEN="1xM4IHjFpX4CwPYr82zZJH9ZjYQ_5kmfqfXit97FkTYSGUrZJ" \ + NOVNC_PORT=$PORT \ +#Ngrok Token + NGROK_AUTH_TOKEN="placeholder" \ +#Brave Shared Memory Usage (Set it to 0 to disable the use of /dev/shm for Brave Browser, helpful for Heroku) + BRAVE_USE_SHM=1 \ #Locale - LANG=en_US.UTF-8 \ - LANGUAGE=en_US.UTF-8 \ - LC_ALL=C.UTF-8 \ - TZ="Asia/Kolkata" + LANG=en_US.UTF-8 \ + LANGUAGE=en_US.UTF-8 \ + LC_ALL=C.UTF-8 \ + TZ="Asia/Kolkata" COPY . /app/.vubuntu SHELL ["/bin/bash", "-c"] -RUN rm -f /etc/apt/sources.list && \ -#All Official Focal Repos - bash -c 'echo -e "deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse\ndeb-src http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse\ndeb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse\ndeb-src http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse\ndeb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse\ndeb-src http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse\ndeb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse\ndeb-src http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse\ndeb http://archive.canonical.com/ubuntu focal partner\ndeb-src http://archive.canonical.com/ubuntu focal partner" >/etc/apt/sources.list' && \ - apt-get update && \ - apt-get install -y \ -#Packages Installation - tzdata \ - software-properties-common \ - apt-transport-https \ - wget \ - htop \ - git \ - curl \ - vim \ - zip \ - sudo \ - net-tools \ - iputils-ping \ - build-essential \ - python3 \ - python3-pip \ - python-is-python3 \ - #perl \ - #ruby \ - golang \ - #lua5.3 \ - #scala \ - #mono-complete \ - #r-base \ - default-jre \ - default-jdk \ - #clojure \ - #php \ - nodejs \ - npm \ - firefox \ - gnome-terminal \ - gnome-calculator \ - gnome-system-monitor \ - gedit \ - vim-gtk3 \ - mousepad \ - libreoffice \ - pcmanfm \ - terminator \ - supervisor \ - x11vnc \ - xvfb \ - gnupg \ - dirmngr \ - gdebi-core \ - nginx \ - openvpn \ - ffmpeg \ - pluma && \ -#Fluxbox - apt-get install -y /app/.vubuntu/assets/packages/fluxbox.deb && \ -#noVNC - apt-get install -y /app/.vubuntu/assets/packages/novnc.deb && \ - cp /usr/share/novnc/vnc.html /usr/share/novnc/index.html && \ - openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -subj "/C=IN/ST=Maharastra/L=Private/O=Dis/CN=www.google.com" -keyout /etc/ssl/novnc.key -out /etc/ssl/novnc.cert && \ +RUN apt-get update && \ + apt-get --no-install-recommends install -y \ +#Basic Packages + tzdata software-properties-common apt-transport-https wget zip unzip htop git curl vim nano zip sudo net-tools x11-utils eterm iputils-ping build-essential xvfb x11vnc supervisor \ +#GUI Utilities + gnome-terminal gnome-calculator gnome-system-monitor pcmanfm terminator firefox \ +#Python + python3 python3-pip python-is-python3 \ +#Java + default-jre default-jdk \ +#Text Editors + vim-gtk3 mousepad pluma \ +#NodeJS + nodejs npm \ +#Go + golang \ +#Other Languages + #perl \ + #ruby \ + #lua5.3 \ + #scala \ + #mono-complete \ + #r-base \ + #clojure \ + #php \ +#Extras + libreoffice \ + gnupg \ + dirmngr \ + gdebi-core \ + nginx \ + ffmpeg && \ +#Fluxbox & noVNC + apt-get install --no-install-recommends -y /app/.vubuntu/assets/packages/fluxbox.deb /app/.vubuntu/assets/packages/novnc.deb && \ + cp /usr/share/novnc/vnc.html /usr/share/novnc/index.html && \ + openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -subj "/C=IN/ST=Maharastra/L=Private/O=Dis/CN=www.google.com" -keyout /etc/ssl/novnc.key -out /etc/ssl/novnc.cert && \ #Websockify - npm i websockify && \ -#MATE Desktop - #apt-get install -y \ - #ubuntu-mate-core \ - #ubuntu-mate-desktop && \ -#XFCE Desktop - #apt-get install -y \ - #xubuntu-desktop && \ + npm i websockify && \ +#MATE Desktop (remove "/app/.vubuntu/assets/packages/fluxbox.deb" from line 66 before uncommenting) + #apt-get install -y \ + #ubuntu-mate-core \ + #ubuntu-mate-desktop && \ +#XFCE Desktop (remove "/app/.vubuntu/assets/packages/fluxbox.deb" from line 66 before uncommenting) + #apt-get install -y \ + #xubuntu-desktop && \ #TimeZone - ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ - echo $TZ > /etc/timezone && \ -#VS Code - wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg && \ - install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/ && \ - echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list && \ - rm -f packages.microsoft.gpg && \ - apt-get update && \ - apt-get install code -y && \ -#Brave - curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg && \ - echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main"|tee /etc/apt/sources.list.d/brave-browser-release.list && \ - apt-get update && \ - apt-get install brave-browser -y && \ -#PeaZip - wget https://github.com/peazip/PeaZip/releases/download/8.1.0/peazip_8.1.0.LINUX.x86_64.GTK2.deb -P /tmp && \ - apt-get install -y /tmp/peazip_8.1.0.LINUX.x86_64.GTK2.deb && \ -#Sublime - curl -fsSL https://download.sublimetext.com/sublimehq-pub.gpg | apt-key add - && \ - add-apt-repository "deb https://download.sublimetext.com/ apt/stable/" && \ - apt-get install -y sublime-text && \ -#Telegram - wget https://updates.tdesktop.com/tlinux/tsetup.2.9.2.tar.xz -P /tmp && \ - tar -xvf /tmp/tsetup.2.9.2.tar.xz -C /tmp && \ - mv /tmp/Telegram/Telegram /usr/bin/telegram && \ -#PowerShell - wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -P /tmp && \ - apt-get install -y /tmp/packages-microsoft-prod.deb && \ - apt-get update && \ - apt-get install -y powershell && \ + ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ + echo $TZ > /etc/timezone && \ +#VS Code - source + wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/packages.microsoft.gpg && \ + install -o root -g root -m 644 /tmp/packages.microsoft.gpg /etc/apt/trusted.gpg.d/ && \ + echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list && \ +#Brave - source + curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg && \ + echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main"|tee /etc/apt/sources.list.d/brave-browser-release.list && \ +#PeaZip - source + wget https://github.com/peazip/PeaZip/releases/download/8.2.0/peazip_8.2.0.LINUX.GTK2-1_amd64.deb -P /tmp && \ +#Sublime - source + curl -fsSL https://download.sublimetext.com/sublimehq-pub.gpg | apt-key add - && \ + add-apt-repository "deb https://download.sublimetext.com/ apt/stable/" && \ +#Telegram - source + wget https://updates.tdesktop.com/tlinux/tsetup.3.2.2.tar.xz -P /tmp && \ + tar -xvf /tmp/tsetup.3.2.2.tar.xz -C /tmp && \ + mv /tmp/Telegram/Telegram /usr/bin/telegram && \ +#PowerShell - source + wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -P /tmp && \ +#Installation + apt-get update && \ + apt-get install --no-install-recommends code brave-browser /tmp/peazip_8.2.0.LINUX.GTK2-1_amd64.deb sublime-text /tmp/packages-microsoft-prod.deb -y && \ + apt-get update && \ + apt-get install --no-install-recommends -y powershell && \ #Ngrok - wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip -P /tmp && \ - unzip /tmp/ngrok-stable-linux-amd64.zip -d /usr/bin && \ - ngrok authtoken $NGROK_AUTH_TOKEN && \ + wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip -P /tmp && \ + unzip /tmp/ngrok-stable-linux-amd64.zip -d /usr/bin && \ + ngrok authtoken $NGROK_AUTH_TOKEN && \ +#Live Server setup for VSCode + code --user-data-dir /root --no-sandbox --install-extension philnash.ngrok-for-vscode && \ + code --user-data-dir /root --no-sandbox --install-extension ritwickdey.LiveServer && \ #Wipe Temp Files - rm -rf /var/lib/apt/lists/* && \ - apt-get clean && \ - rm -rf /tmp/* + rm -rf /var/lib/apt/lists/* && \ + apt-get clean && \ + apt-get autoremove -y && \ + rm -rf /tmp/* -ENTRYPOINT ["supervisord", "-l", "/app/.vubuntu/supervisord.log", "-c"] +ENTRYPOINT ["supervisord", "-l", "/app/.vubuntu/assets/logs/supervisord.log", "-c"] CMD ["/app/.vubuntu/assets/configs/supervisordconf"] + diff --git a/Dockerfile.heroku b/Dockerfile.heroku index c02f671..9fb70e3 100755 --- a/Dockerfile.heroku +++ b/Dockerfile.heroku @@ -1,6 +1,6 @@ -FROM vital987/vubuntu:latest +FROM vital987/vubuntu:heroku -ENV DEBIAN_FRONTEND=noninteractive \ +ENV DEBIAN_FRONTEND=noninteractive \ #VNC Server Password VNC_PASS="samplepass" \ #VNC Server Title(w/o spaces) @@ -10,7 +10,9 @@ ENV DEBIAN_FRONTEND=noninteractive \ #NoVNC Port NOVNC_PORT=5900 \ #PORT - PORT=80 \ + PORT=80 \ +#Disable Shared Memory for Brave + BRAVE_USE_SHM=0 \ #Locale LANG=en_US.UTF-8 \ LANGUAGE=en_US.UTF-8 \ diff --git a/README.md b/README.md index 8cda592..2e58c3f 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,52 @@ -# Ubuntu with NoVNC/[PureVNC](https://github.com/vital987/vubuntu/tree/purevnc) (Direct VNC) +# VNC + Ubuntu = Vubuntu ¯\\_\(ツ\)\_\/¯ + +[![Ubuntu Version](https://img.shields.io/static/v1?label=Ubuntu&message=20.04&color=E95420&logo=ubuntu)](https://ubuntu.com) [![Maintainer](https://img.shields.io/static/v1?label=Maintainer&message=Vital987&color=1e90ff)](https://github.com/vital987) [![Maintainance](https://img.shields.io/badge/Maintenance%20Level-Active-success.svg)](https://github.com/vital987) [![Docker Pulls](https://img.shields.io/docker/pulls/vital987/vubuntu.svg)](https://hub.docker.com/r/vital987/vubuntu) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)]()
[![Latest](https://raw.githubusercontent.com/vital987/vubuntu/master/assets/repo_files/button-latest.png)](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/) [![Minimal](https://raw.githubusercontent.com/vital987/vubuntu/master/repo_files/assets/button-minimal.png)](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/tree/minimal) [![PureVNC](https://raw.githubusercontent.com/vital987/vubuntu/master/repo_files/assets/button-purevnc.png)](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/tree/purevnc) [![PureVNC-Minimal](https://raw.githubusercontent.com/vital987/vubuntu/master/repo_files/assets/button-purevnc-minimal.png)](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu/tree/purevnc-minimal) -[![Ubuntu Version](https://img.shields.io/static/v1?label=Ubuntu&message=20.04&color=E95420&logo=ubuntu)](https://ubuntu.com) [![Maintainer](https://img.shields.io/static/v1?label=Maintainer&message=Vital987&color=1e90ff)](https://github.com/vital987) [![Maintainance](https://img.shields.io/badge/Maintenance%20Level-Active-success.svg)](https://github.com/vital987) [![Docker Pulls](https://img.shields.io/docker/pulls/vital987/vubuntu.svg)](https://hub.docker.com/r/vital987/vubuntu) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)]()
[![Heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/vital987/vubuntu)
## **Table of Contents :** + * [**Available Options**](#available-options-) * [**Packages**](#packages-) * [**Screenshots**](#screenshots-) * [**Environment Variables**](#environment-variables-) * [**Installation**](#installation-) * [**Warnings**](#warnings-) + +## **Available Options :** + * **[Latest](https://github.com/vital987/vubuntu/):** Full version of vubuntu with utilities, additional installed languages (Java & Go) & optional packages. + * **[Minimal](https://github.com/vital987/vubuntu/tree/minimal):** Minimal version with only required packages, see next section for more info. + * **[PureVNC](https://github.com/vital987/vubuntu/tree/purevnc):** Full, direct VNC access without noVNC. + * **[PureVNC-Minimal](https://github.com/vital987/vubuntu/tree/purevnc):** Minimal, direct VNC access without noVNC. + ## **Packages :** + * •: Available in minimal version * **Browsers :** - * [![Firefox](https://img.shields.io/static/v1?label=Firefox&message=%20&color=orange&logo=firefox-browser)]() [![Brave](https://img.shields.io/static/v1?label=Brave&message=%20&color=fa552a&logo=brave)]() + * [![Firefox](https://img.shields.io/static/v1?label=Firefox&message=%20&color=orange&logo=firefox-browser)]() [![Brave](https://img.shields.io/static/v1?label=Brave&message=•&color=fa552a&logo=brave)]() * **Shells :** - * [![Gnome Terminal](https://img.shields.io/static/v1?label=GnomeTerminal&message=%20&color=green&logo=gnome&logoColor=green)]() [![Terminator](https://img.shields.io/static/v1?label=Terminator&message=%20&color=red&logo=powershell&logoColor=red)]() [![PowerShell](https://img.shields.io/static/v1?label=PowerShell&message=%20&color=5391FE&logo=powershell&logoColor=5391FE)]() + * [![Gnome Terminal](https://img.shields.io/static/v1?label=GnomeTerminal&message=%20&color=green&logo=gnome&logoColor=green)]() [![Terminator](https://img.shields.io/static/v1?label=Terminator&message=•&color=red&logo=powershell&logoColor=red)]() [![PowerShell](https://img.shields.io/static/v1?label=PowerShell&message=%20&color=5391FE&logo=powershell&logoColor=5391FE)]() * **Coding :** - * [![VS Code](https://img.shields.io/static/v1?label=VS%20Code&message=%20&color=1e90ff&logo=visual-studio-code&logoColor=1e90ff)]() + * [![VS Code](https://img.shields.io/static/v1?label=VS%20Code&message=•&color=1e90ff&logo=visual-studio-code&logoColor=1e90ff)]() * **Text Editors :** - * [![G-Vim](https://img.shields.io/static/v1?label=G-Vim&message=%20&color=brightgreen&logo=vim&logoColor=brightgreen)]() [![Pluma](https://img.shields.io/static/v1?label=Pluma&message=%20&color=green&logo=textpattern&logoColor=green)]() [![Sublime](https://img.shields.io/static/v1?label=Sublime%20Text&message=%20&color=orange&logo=sublime-text&logoColor=orange)]() + * [![G-Vim](https://img.shields.io/static/v1?label=G-Vim&message=%20&color=brightgreen&logo=vim&logoColor=brightgreen)]() [![Pluma](https://img.shields.io/static/v1?label=Pluma&message=•&color=green&logo=textpattern&logoColor=green)]() [![Sublime](https://img.shields.io/static/v1?label=Sublime%20Text&message=%20&color=orange&logo=sublime-text&logoColor=orange)]() * **Office Suite :** * [![LibreOffice](https://img.shields.io/static/v1?label=Libre%20Office&message=%20&color=brightgreen&logo=libreoffice&logoColor=brightgreen)]() * **Social Apps :** - * [![Telegram](https://img.shields.io/static/v1?label=Telegram&message=%20&color=26A5E4&logo=telegram&logoColor=26A5E4)]() + * [![Telegram](https://img.shields.io/static/v1?label=Telegram&message=•&color=26A5E4&logo=telegram&logoColor=26A5E4)]() * **Utilities :** - * [![File Manager](https://img.shields.io/static/v1?label=File%20Manager&message=%20&color=EFF700&logo=files&logoColor=EFF700)]() [![Calculator](https://img.shields.io/static/v1?label=Calculator&message=%20&color=017A79&logo=craft-cms&logoColor=017A79)]() [![System Monitor](https://img.shields.io/static/v1?label=System%20Monitor&message=%20&color=111324&logo=campaign-monitor&logoColor=111324)]() [![PeaZip](https://img.shields.io/static/v1?label=Ngrok&message=%20&color=1853DB&logo=ngrok&logoColor=1853DB)]() [![PeaZip](https://img.shields.io/static/v1?label=PeaZip&message=%20&color=6300F7&logo=git-lfs&logoColor=6300F7)]() -* **Languages Installed [\* = Optional, can enable from Dockerfile]:** - * [![C](https://img.shields.io/static/v1?label=C&message=%20&logo=c)]() [![C++](https://img.shields.io/static/v1?label=C%2b%2b&message=%20&logo=c%2b%2b&logoColor=1e90ff&color=1e90ff)]() [![C Sharp(optional)](https://img.shields.io/static/v1?label=*C%23&message=%20&logo=c-sharp&logoColor=green&color=green)]() [![Clojure(optional)](https://img.shields.io/static/v1?label=*Clojure&message=%20&logo=clojure&logoColor=brightgreen&color=brightgreen)]() [![Go](https://img.shields.io/static/v1?label=Go&message=%20&logo=go&logoColor=1e90ff&color=1e90ff)]() [![Java](https://img.shields.io/static/v1?label=Java&message=%20&logo=java&logoColor=f89820&color=f89820)]() [![Lua(optional)](https://img.shields.io/static/v1?label=*Lua&message=%20&color=blueviolet&logo=lua&logoColor=9638E7)]() [![R(optional)](https://img.shields.io/static/v1?label=*R&message=%20&logo=r&logoColor=blue&color=blue)]() [![Ruby](https://img.shields.io/static/v1?label=Ruby&message=%20&logo=ruby&logoColor=9b111e&color=9b111e)]() [![Perl(optional)](https://img.shields.io/static/v1?label=*Perl&message=%20&logo=perl&logoColor=cc99ff&color=cc99ff)]() [![Python](https://img.shields.io/static/v1?label=Python&message=%20&logo=python&color=blue)]() + * [![File Manager](https://img.shields.io/static/v1?label=File%20Manager&message=•&color=EFF700&logo=files&logoColor=EFF700)]() [![Calculator](https://img.shields.io/static/v1?label=Calculator&message=%20&color=017A79&logo=craft-cms&logoColor=017A79)]() [![System Monitor](https://img.shields.io/static/v1?label=System%20Monitor&message=%20&color=111324&logo=campaign-monitor&logoColor=111324)]() [![Ngrok](https://img.shields.io/static/v1?label=Ngrok&message=•&color=1853DB&logo=ngrok&logoColor=1853DB)]() [![PeaZip](https://img.shields.io/static/v1?label=PeaZip&message=•&color=6300F7&logo=git-lfs&logoColor=6300F7)]() +* **Languages Installed:** + * [![C](https://img.shields.io/static/v1?label=C&message=•&logo=c)]() [![C++](https://img.shields.io/static/v1?label=C%2b%2b&message=•&logo=c%2b%2b&logoColor=1e90ff&color=1e90ff)]() [![Go](https://img.shields.io/static/v1?label=Go&message=%20&logo=go&logoColor=1e90ff&color=1e90ff)]() [![Java](https://img.shields.io/static/v1?label=Java&message=%20&logo=java&logoColor=f89820&color=f89820)]() [![Python](https://img.shields.io/static/v1?label=Python&message=•&logo=python&color=blue)]() ## **Screenshots :**
Laptop/Desktop -

-

+   +

Smartphone/Tablet -

-

+   +

@@ -50,8 +60,10 @@ | DISPLAY | Display Server Port | | PORT | NoVNC HTTP Port | | NGROK_AUTH_TOKEN | Ngrok Token | +| NGROK_REGION | Ngrok Server Region (Only PureVNC) | | NO_SLEEP | Prevent Heroku app from sleeping, disabled by default | | APP_NAME | Name of Heroku app | +| BRAVE_USE_SHM | Usage of /dev/shm for Brave | ## **Installation :** * Heroku Users : @@ -69,10 +81,11 @@ -e PORT=9870 \ -d -p 8080:9870 \ vital987/vubuntu:latest - ``` + * noVNC Web-UI will be accessible on port **8080** + ## **Warnings :** * [ ! ] **VNC_TITLE & VNC_PASS values should be without spaces.** - * [ ! ] **The whole project runs as a root user in a docker container.** + * [ ! ] **The whole project runs as a root user and non-sandboxed chromium in a docker container.** * [ ! ] **Using VNC/Remote Desktops are strictly prohibited/banned on many free platforms.** * [ ! ] **Deploy/Use at your own risk & responsibility!** diff --git a/app.json b/app.json index 91708db..f68111b 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "name": "Vubuntu", "description": "Fully fledged Ubuntu NoVNC, refer readme for more info.", "repository": "https://github.com/vital987/vubuntu.git", - "logo": "https://imgur.com/1qCGUwK.png", + "logo": "https://raw.githubusercontent.com/vital987/vubuntu/master/assets/icons/64x64.png", "keywords": ["docker","ubuntu", "vscode", "novnc", "firefox", "brave", "fluxbox", "linux", "remote", "ssh", "vnc", "vubuntu"], "stack": "container", "env": { diff --git a/assets/packages/fluxbox.deb b/assets/packages/fluxbox.deb index 2a89f2c2ac6a9a2c7ceb91ef9b4e34e5f5ec45c1..e050c61b0dd5c1fae9b3c71ff8ce2d406a73f7f3 100644 GIT binary patch literal 867960 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