diff --git a/omnitool/gradio/app.py b/omnitool/gradio/app.py index 54cca8a0..c1ee7952 100644 --- a/omnitool/gradio/app.py +++ b/omnitool/gradio/app.py @@ -190,7 +190,7 @@ def valid_params(user_input, state): """Validate all requirements and return a list of error messages.""" errors = [] - for server_name, url in [('Windows Host', 'localhost:5000'), ('OmniParser Server', args.omniparser_server_url)]: + for server_name, url in [('Guest Host', 'localhost:5000'), ('OmniParser Server', args.omniparser_server_url)]: try: url = f'http://{url}/probe' response = requests.get(url, timeout=3) diff --git a/omnitool/omnibox/.gitignore b/omnitool/omnibox/.gitignore index ed5deb8a..7085c29c 100644 --- a/omnitool/omnibox/.gitignore +++ b/omnitool/omnibox/.gitignore @@ -2,3 +2,4 @@ vm/win11iso/custom.iso vm/win11storage vm/win11setup/setupscripts/firstboot_log.txt vm/win11setup/setupscripts/server/server.log +vm.linux/storage/ diff --git a/omnitool/omnibox/Dockerfile.linux b/omnitool/omnibox/Dockerfile.linux new file mode 100644 index 00000000..33f4b539 --- /dev/null +++ b/omnitool/omnibox/Dockerfile.linux @@ -0,0 +1,84 @@ +# Copyright 2025 esmit +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# This Dockerfile is based on https://github.com/Tiryoh/docker-ros-desktop-vnc/tree/master/noetic +# which is released under the Apache-2.0 license. + +FROM ubuntu:focal-20241011 + +ARG TARGETPLATFORM +LABEL maintainer="esmit" + +SHELL ["/bin/bash", "-c"] + +# Upgrade OS +RUN apt-get update -q && \ + DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && \ + apt-get autoclean && \ + apt-get autoremove && \ + rm -rf /var/lib/apt/lists/* + +# Install Ubuntu Mate desktop +RUN apt-get update -q && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + ubuntu-mate-desktop && \ + apt-get autoclean && \ + apt-get autoremove && \ + rm -rf /var/lib/apt/lists/* + +# Add Package +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + tigervnc-standalone-server tigervnc-common \ + supervisor wget curl gosu git sudo python3-pip tini \ + build-essential vim sudo lsb-release locales \ + bash-completion tzdata terminator && \ + apt-get autoclean && \ + apt-get autoremove && \ + rm -rf /var/lib/apt/lists/* + +# noVNC and Websockify +RUN git clone https://github.com/AtsushiSaito/noVNC.git -b add_clipboard_support /usr/lib/novnc +RUN pip install --no-cache-dir git+https://github.com/novnc/websockify.git@v0.10.0 +RUN ln -s /usr/lib/novnc/vnc.html /usr/lib/novnc/index.html + +# Set remote resize function enabled by default +RUN sed -i "s/UI.initSetting('resize', 'off');/UI.initSetting('resize', 'remote');/g" /usr/lib/novnc/app/ui.js + +# Disable auto update and crash report +RUN sed -i 's/Prompt=.*/Prompt=never/' /etc/update-manager/release-upgrades +RUN sed -i 's/enabled=1/enabled=0/g' /etc/default/apport + +# Install Firefox +RUN DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:mozillateam/ppa -y && \ + echo 'Package: *' > /etc/apt/preferences.d/mozilla-firefox && \ + echo 'Pin: release o=LP-PPA-mozillateam' >> /etc/apt/preferences.d/mozilla-firefox && \ + echo 'Pin-Priority: 1001' >> /etc/apt/preferences.d/mozilla-firefox && \ + apt-get update -q && \ + apt-get install -y --allow-downgrades \ + firefox && \ + apt-get autoclean && \ + apt-get autoremove && \ + rm -rf /var/lib/apt/lists/* + + +# Enable apt-get completion after running `apt-get update` in the container +RUN rm /etc/apt/apt.conf.d/docker-clean + +COPY --chmod=755 ./vm.linux/buildcontainer/entry.sh /run/ +#ENTRYPOINT ["/usr/bin/tini", "-s", "/run/entrypoint.sh"] +ENTRYPOINT [ "/bin/bash", "-c", "/run/entry.sh" ] + +ENV USER ubuntu +ENV PASSWD ubuntu diff --git a/omnitool/omnibox/compose.linux.yml b/omnitool/omnibox/compose.linux.yml new file mode 100644 index 00000000..eef68fa8 --- /dev/null +++ b/omnitool/omnibox/compose.linux.yml @@ -0,0 +1,20 @@ +services: + linux: + image: linux-local + container_name: omni-linux + privileged: true + environment: + RAM_SIZE: "8G" + CPU_CORES: "4" + DISK_SIZE: "20G" + devices: + - /dev/kvm + - /dev/net/tun + cap_add: + - NET_ADMIN + ports: + - 8006:80 # Web Viewer access + - 5000:5000 # Computer control server + volumes: + - ./vm.linux/storage:/data + - ./vm/win11setup/setupscripts/server:/controlserver # reuse the same server code for windows and linux diff --git a/omnitool/omnibox/scripts/manage_vm.sh b/omnitool/omnibox/scripts/manage_vm.sh index 6acf45ad..e36d7682 100755 --- a/omnitool/omnibox/scripts/manage_vm.sh +++ b/omnitool/omnibox/scripts/manage_vm.sh @@ -1,14 +1,32 @@ #!/bin/bash +# Default VM type is windows if not specified +VM_TYPE="windows" + +# Get the directory where the script is located +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +# Get the parent directory (omnibox directory) +OMNIBOX_DIR="$( cd "$SCRIPT_DIR/.." && pwd )" + create_vm() { - if ! docker images windows-local -q | grep -q .; then + local dockerfile="Dockerfile" + local compose_file="compose.yml" + local image_name="windows-local" + + if [ "$VM_TYPE" == "linux" ]; then + dockerfile="Dockerfile.linux" + compose_file="compose.linux.yml" + image_name="linux-local" + fi + + if ! docker images $image_name -q | grep -q .; then echo "Image not found locally. Building..." - docker build -t windows-local .. + docker build --no-cache --pull -t $image_name -f "$OMNIBOX_DIR/$dockerfile" "$OMNIBOX_DIR" else echo "Image found locally. Skipping build." fi - docker compose -f ../compose.yml up -d + docker compose -f "$OMNIBOX_DIR/$compose_file" up -d # Wait for the VM to start up while true; do @@ -20,12 +38,39 @@ create_vm() { sleep 5 done - echo "VM + server is up and running!" + echo "$VM_TYPE VM + server is up and running!" } start_vm() { - echo "Starting VM..." - docker compose -f ../compose.yml start + local compose_file="compose.yml" + + if [ "$VM_TYPE" == "linux" ]; then + compose_file="compose.linux.yml" + fi + + echo "Starting $VM_TYPE VM..." + + # Show container status before starting + echo "Container status before starting:" + docker compose -f "$OMNIBOX_DIR/$compose_file" ps + + # Start the containers + docker compose -f "$OMNIBOX_DIR/$compose_file" start + + # Show container status after starting + echo "Container status after starting:" + docker compose -f "$OMNIBOX_DIR/$compose_file" ps + + # Check if containers are running + if docker compose -f "$OMNIBOX_DIR/$compose_file" ps --status running | grep -q .; then + echo "Containers are running." + else + echo "Warning: No containers appear to be running. Check logs for details." + echo "Container logs:" + docker compose -f "$OMNIBOX_DIR/$compose_file" logs --tail=20 + fi + + # Uncomment this section if you want to wait for the server to respond while true; do response=$(curl --write-out '%{http_code}' --silent --output /dev/null localhost:5000/probe) if [ $response -eq 200 ]; then @@ -34,29 +79,70 @@ start_vm() { echo "Waiting for a response from the computer control server" sleep 5 done - echo "VM started" + + echo "$VM_TYPE VM started" } stop_vm() { - echo "Stopping VM..." - docker compose -f ../compose.yml stop - echo "VM stopped" + local compose_file="compose.yml" + + if [ "$VM_TYPE" == "linux" ]; then + compose_file="compose.linux.yml" + fi + + echo "Stopping $VM_TYPE VM..." + docker compose -f "$OMNIBOX_DIR/$compose_file" stop + echo "$VM_TYPE VM stopped" } delete_vm() { - echo "Removing VM and associated containers..." - docker compose -f ../compose.yml down - echo "VM removed" + local compose_file="compose.yml" + local image_name="windows-local" + + if [ "$VM_TYPE" == "linux" ]; then + compose_file="compose.linux.yml" + image_name="linux-local" + fi + + echo "Removing $VM_TYPE VM and associated containers..." + docker compose -f "$OMNIBOX_DIR/$compose_file" down + docker rmi $image_name + echo "$VM_TYPE VM removed" } -# Check if control parameter is provided -if [ -z "$1" ]; then - echo "Usage: $0 [create|start|stop|delete]" +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case "$1" in + create|start|stop|delete) + COMMAND="$1" + shift + ;; + --linux) + VM_TYPE="linux" + shift + ;; + --windows) + VM_TYPE="windows" + shift + ;; + *) + echo "Unknown option: $1" + echo "Usage: $0 [create|start|stop|delete] [--linux|--windows]" + exit 1 + ;; + esac +done + +# Check if command is provided +if [ -z "$COMMAND" ]; then + echo "Usage: $0 [create|start|stop|delete] [--linux|--windows]" + echo " --linux Use Linux VM configuration (default is Windows)" + echo " --windows Use Windows VM configuration" exit 1 fi -# Execute the appropriate function based on the control parameter -case "$1" in +# Execute the appropriate function based on the command +case "$COMMAND" in "create") create_vm ;; @@ -69,9 +155,4 @@ case "$1" in "delete") delete_vm ;; - *) - echo "Invalid option: $1" - echo "Usage: $0 [create|start|stop|delete]" - exit 1 - ;; esac \ No newline at end of file diff --git a/omnitool/omnibox/vm.linux/buildcontainer/entry.sh b/omnitool/omnibox/vm.linux/buildcontainer/entry.sh new file mode 100644 index 00000000..6889432a --- /dev/null +++ b/omnitool/omnibox/vm.linux/buildcontainer/entry.sh @@ -0,0 +1,345 @@ +#!/bin/bash + +# Create User +USER=${USER:-root} +HOME=/root +if [ "$USER" != "root" ]; then + echo "* enable custom user: $USER" + useradd --create-home --shell /bin/bash --user-group --groups adm,sudo "$USER" + echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + if [ -z "$PASSWORD" ]; then + echo " set default password to \"ubuntu\"" + PASSWORD=ubuntu + fi + HOME="/home/$USER" + echo "$USER:$PASSWORD" | /usr/sbin/chpasswd 2> /dev/null || echo "" + cp -r /root/{.config,.gtkrc-2.0,.asoundrc} "$HOME" 2>/dev/null + chown -R "$USER:$USER" "$HOME" + [ -d "/dev/snd" ] && chgrp -R adm /dev/snd +fi + +# VNC password +VNC_PASSWORD=${PASSWORD:-ubuntu} + +mkdir -p "$HOME/.vnc" +echo "$VNC_PASSWORD" | vncpasswd -f > "$HOME/.vnc/passwd" +chmod 600 "$HOME/.vnc/passwd" +chown -R "$USER:$USER" "$HOME" +sed -i "s/password = WebUtil.getConfigVar('password');/password = '$VNC_PASSWORD'/" /usr/lib/novnc/app/ui.js + +# xstartup +XSTARTUP_PATH="$HOME/.vnc/xstartup" +cat << EOF > "$XSTARTUP_PATH" +#!/bin/sh +unset DBUS_SESSION_BUS_ADDRESS +mate-session +EOF +chown "$USER:$USER" "$XSTARTUP_PATH" +chmod 755 "$XSTARTUP_PATH" + +# vncserver launch +VNCRUN_PATH="$HOME/.vnc/vnc_run.sh" +cat << EOF > "$VNCRUN_PATH" +#!/bin/sh + +# Workaround for issue when image is created with "docker commit". +# Thanks to @SaadRana17 +# https://github.com/Tiryoh/docker-ros2-desktop-vnc/issues/131#issuecomment-2184156856 + +if [ -e /tmp/.X1-lock ]; then + rm -f /tmp/.X1-lock +fi +if [ -e /tmp/.X11-unix/X1 ]; then + rm -f /tmp/.X11-unix/X1 +fi + +# Create log directory +mkdir -p "$HOME/.vnc/logs" + +if [ $(uname -m) = "aarch64" ]; then + LD_PRELOAD=/lib/aarch64-linux-gnu/libgcc_s.so.1 vncserver :1 -fg -geometry 1920x1080 -depth 24" +else + vncserver :1 -fg -geometry 1920x1080 -depth 24" +fi +EOF +chmod 755 "$VNCRUN_PATH" +chown "$USER:$USER" "$VNCRUN_PATH" + +# Enable control server dependencies +sudo apt-get update +sudo apt-get install -y python3-tk python3-dev gnome-screenshot +sudo ln -sf /usr/bin/python3 /usr/bin/python +mkdir -p $HOME/controlserver +CONTROL_SERVER_PATH=$HOME/controlserver/controlserver.sh +cat << EOF > $CONTROL_SERVER_PATH +#!/bin/bash +pip install -r /controlserver/requirements.txt +python /controlserver/main.py +EOF +chmod 755 "$CONTROL_SERVER_PATH" +chown "$USER:$USER" "$CONTROL_SERVER_PATH" + +# Supervisor +CONF_PATH=/etc/supervisor/conf.d/supervisord.conf +cat << EOF > $CONF_PATH +[supervisord] +nodaemon=true +user=root +[program:vnc] +command=gosu '$USER' bash '$VNCRUN_PATH' +stdout_logfile=/var/log/supervisor/vnc_stdout.log +stderr_logfile=/var/log/supervisor/vnc_stderr.log +[program:novnc] +command=gosu '$USER' bash -c "websockify --web=/usr/lib/novnc 80 localhost:5901" +stdout_logfile=/var/log/supervisor/novnc_stdout.log +stderr_logfile=/var/log/supervisor/novnc_stderr.log +[program:controlserver] +command=gosu '$USER' bash -c "export DISPLAY=:1 && bash '$CONTROL_SERVER_PATH'" +environment=DISPLAY=:1 +stdout_logfile=/var/log/supervisor/controlserver_stdout.log +stderr_logfile=/var/log/supervisor/controlserver_stderr.log +EOF + +# Create supervisor log directory +mkdir -p /var/log/supervisor + +# Create Desktop directory first +mkdir -p "$HOME/Desktop" + + +cat << EOF > "$HOME/Desktop/firefox.desktop" +#!/usr/bin/env xdg-open +[Desktop Entry] +Version=1.0 +Name=Firefox Web Browser +Name[ar]=متصفح الويب فَيَرفُكْس +Name[ast]=Restolador web Firefox +Name[bn]=ফায়ারফক্স ওয়েব ব্রাউজার +Name[ca]=Navegador web Firefox +Name[cs]=Firefox Webový prohlížeč +Name[da]=Firefox - internetbrowser +Name[el]=Περιηγητής Firefox +Name[es]=Navegador web Firefox +Name[et]=Firefoxi veebibrauser +Name[fa]=مرورگر اینترنتی Firefox +Name[fi]=Firefox-selain +Name[fr]=Navigateur Web Firefox +Name[gl]=Navegador web Firefox +Name[he]=דפדפן האינטרנט Firefox +Name[hr]=Firefox web preglednik +Name[hu]=Firefox webböngésző +Name[it]=Firefox Browser Web +Name[ja]=Firefox ウェブ・ブラウザ +Name[ko]=Firefox 웹 브라우저 +Name[ku]=Geroka torê Firefox +Name[lt]=Firefox interneto naršyklė +Name[nb]=Firefox Nettleser +Name[nl]=Firefox webbrowser +Name[nn]=Firefox Nettlesar +Name[no]=Firefox Nettleser +Name[pl]=Przeglądarka WWW Firefox +Name[pt]=Firefox Navegador Web +Name[pt_BR]=Navegador Web Firefox +Name[ro]=Firefox – Navigator Internet +Name[ru]=Веб-браузер Firefox +Name[sk]=Firefox - internetový prehliadač +Name[sl]=Firefox spletni brskalnik +Name[sv]=Firefox webbläsare +Name[tr]=Firefox Web Tarayıcısı +Name[ug]=Firefox توركۆرگۈ +Name[uk]=Веб-браузер Firefox +Name[vi]=Trình duyệt web Firefox +Name[zh_CN]=Firefox 网络浏览器 +Name[zh_TW]=Firefox 網路瀏覽器 +Comment=Browse the World Wide Web +Comment[ar]=تصفح الشبكة العنكبوتية العالمية +Comment[ast]=Restola pela Rede +Comment[bn]=ইন্টারনেট ব্রাউজ করুন +Comment[ca]=Navegueu per la web +Comment[cs]=Prohlížení stránek World Wide Webu +Comment[da]=Surf på internettet +Comment[de]=Im Internet surfen +Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web) +Comment[es]=Navegue por la web +Comment[et]=Lehitse veebi +Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید +Comment[fi]=Selaa Internetin WWW-sivuja +Comment[fr]=Naviguer sur le Web +Comment[gl]=Navegar pola rede +Comment[he]=גלישה ברחבי האינטרנט +Comment[hr]=Pretražite web +Comment[hu]=A világháló böngészése +Comment[it]=Esplora il web +Comment[ja]=ウェブを閲覧します +Comment[ko]=웹을 돌아 다닙니다 +Comment[ku]=Li torê bigere +Comment[lt]=Naršykite internete +Comment[nb]=Surf på nettet +Comment[nl]=Verken het internet +Comment[nn]=Surf på nettet +Comment[no]=Surf på nettet +Comment[pl]=Przeglądanie stron WWW +Comment[pt]=Navegue na Internet +Comment[pt_BR]=Navegue na Internet +Comment[ro]=Navigați pe Internet +Comment[ru]=Доступ в Интернет +Comment[sk]=Prehliadanie internetu +Comment[sl]=Brskajte po spletu +Comment[sv]=Surfa på webben +Comment[tr]=İnternet'te Gezinin +Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ +Comment[uk]=Перегляд сторінок Інтернету +Comment[vi]=Để duyệt các trang web +Comment[zh_CN]=浏览互联网 +Comment[zh_TW]=瀏覽網際網路 +GenericName=Web Browser +GenericName[ar]=متصفح ويب +GenericName[ast]=Restolador Web +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[ca]=Navegador web +GenericName[cs]=Webový prohlížeč +GenericName[da]=Webbrowser +GenericName[el]=Περιηγητής διαδικτύου +GenericName[es]=Navegador web +GenericName[et]=Veebibrauser +GenericName[fa]=مرورگر اینترنتی +GenericName[fi]=WWW-selain +GenericName[fr]=Navigateur Web +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[it]=Browser web +GenericName[ja]=ウェブ・ブラウザ +GenericName[ko]=웹 브라우저 +GenericName[ku]=Geroka torê +GenericName[lt]=Interneto naršyklė +GenericName[nb]=Nettleser +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[no]=Nettleser +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator Internet +GenericName[ru]=Веб-браузер +GenericName[sk]=Internetový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sv]=Webbläsare +GenericName[tr]=Web Tarayıcı +GenericName[ug]=توركۆرگۈ +GenericName[uk]=Веб-браузер +GenericName[vi]=Trình duyệt Web +GenericName[zh_CN]=网络浏览器 +GenericName[zh_TW]=網路瀏覽器 +Keywords=Internet;WWW;Browser;Web;Explorer +Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب +Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador +Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer +Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer +Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet +Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen +Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ +Keywords[es]=Explorador;Internet;WWW +Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa +Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur +Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה; +Keywords[hr]=Internet;WWW;preglednik;Web +Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer +Keywords[it]=Internet;WWW;Browser;Web;Navigatore +Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk +Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ +Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside +Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online +Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador +Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador +Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис +Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer +Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet +Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara +Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд +Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web +Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站; +Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐 +Exec=firefox %u +Terminal=false +X-MultipleArgs=false +Type=Application +Icon=firefox +Categories=GNOME;GTK;Network;WebBrowser; +MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall; +StartupNotify=true +Actions=new-window;new-private-window; + +[Desktop Action new-window] +Name=Open a New Window +Name[ar]=افتح نافذة جديدة +Name[ast]=Abrir una ventana nueva +Name[bn]=Abrir una ventana nueva +Name[ca]=Obre una finestra nova +Name[cs]=Otevřít nové okno +Name[da]=Åbn et nyt vindue +Name[de]=Ein neues Fenster öffnen +Name[el]=Νέο παράθυρο +Name[es]=Abrir una ventana nueva +Name[fi]=Avaa uusi ikkuna +Name[fr]=Ouvrir une nouvelle fenêtre +Name[gl]=Abrir unha nova xanela +Name[he]=פתיחת חלון חדש +Name[hr]=Otvori novi prozor +Name[hu]=Új ablak nyitása +Name[it]=Apri una nuova finestra +Name[ja]=新しいウィンドウを開く +Name[ko]=새 창 열기 +Name[ku]=Paceyeke nû veke +Name[lt]=Atverti naują langą +Name[nb]=Åpne et nytt vindu +Name[nl]=Nieuw venster openen +Name[pt]=Abrir nova janela +Name[pt_BR]=Abrir nova janela +Name[ro]=Deschide o fereastră nouă +Name[ru]=Новое окно +Name[sk]=Otvoriť nové okno +Name[sl]=Odpri novo okno +Name[sv]=Öppna ett nytt fönster +Name[tr]=Yeni pencere aç +Name[ug]=يېڭى كۆزنەك ئېچىش +Name[uk]=Відкрити нове вікно +Name[vi]=Mở cửa sổ mới +Name[zh_CN]=新建窗口 +Name[zh_TW]=開啟新視窗 +Exec=firefox -new-window + +[Desktop Action new-private-window] +Name=Open a New Private Window +Name[ar]=افتح نافذة جديدة للتصفح الخاص +Name[ca]=Obre una finestra nova en mode d'incògnit +Name[cs]=Otevřít nové anonymní okno +Name[de]=Ein neues privates Fenster öffnen +Name[el]=Νέο ιδιωτικό παράθυρο +Name[es]=Abrir una ventana privada nueva +Name[fi]=Avaa uusi yksityinen ikkuna +Name[fr]=Ouvrir une nouvelle fenêtre de navigation privée +Name[he]=פתיחת חלון גלישה פרטית חדש +Name[hu]=Új privát ablak nyitása +Name[it]=Apri una nuova finestra anonima +Name[nb]=Åpne et nytt privat vindu +Name[ru]=Новое приватное окно +Name[sl]=Odpri novo okno zasebnega brskanja +Name[sv]=Öppna ett nytt privat fönster +Name[tr]=Yeni gizli pencere aç +Name[uk]=Відкрити нове вікно у потайливому режимі +Name[zh_TW]=開啟新隱私瀏覽視窗 +Exec=firefox -private-window +EOF + +# Make desktop files executable and set ownership +chmod +x "$HOME/Desktop/firefox.desktop" +chown -R "$USER:$USER" "$HOME/Desktop" + +# clearup +PASSWORD= +VNC_PASSWORD= + +# Run tini with the subreaper option to fix the warning +exec /bin/tini -s -- supervisord -n -c /etc/supervisor/supervisord.conf diff --git a/omnitool/readme.md b/omnitool/readme.md index a45e8670..c2026c9b 100644 --- a/omnitool/readme.md +++ b/omnitool/readme.md @@ -88,6 +88,13 @@ There are three components: f. After creating the first time it will store a save of the VM state in `vm/win11storage`. You can then manage the VM with `./manage_vm.sh start` and `./manage_vm.sh stop`. To delete the VM, use `./manage_vm.sh delete` and delete the `OmniParser/omnitool/omnibox/vm/win11storage` directory. + +> [!note] You can now create and manage a Linux VM, use the script with commands like: +> `./manage_vm.sh create --linux` to create a Linux VM +> `./manage_vm.sh start --linux` to start a Linux VM +> `./manage_vm.sh create` to create a Windows VM (default) +> `./manage_vm.sh stop --windows` to explicitly stop a Windows VM + 3. **gradio**: a. Navigate to the gradio directory with `cd OmniParser/omnitool/gradio`