Une fonctionnalité connue de Chromium est la possibilité de le faire fonctionner en arrière-plan, ce qui facilite son ouverture.
Est-il possible de faire la même chose avec Firefox (et d'autres applications)?
La solution ci-dessous vous permettra d’exécuter firefox (ou toute autre application) en arrière-plan, ce qui signifie: sans fenêtre visible . L'application ne s'affiche pas non plus dans Dash en tant qu'application en cours d'exécution:
Si vous choisissez Toggle Firefox Cependant, l'application apparaîtra immédiatement:
Si l'icône du panneau (indicateur) démarre, il ouvre une nouvelle fenêtre firefox
mais le cache immédiatement (y compris les éventuelles fenêtres firefox
existantes existantes) de la surface de la terre, à l'aide de xdotool
:
xdotool windowunmap <window_id>
Cela masquera non seulement la fenêtre, mais masquera également le fait que firefox
est en cours d'exécution , car le programme de lancement d'unité agit sur des fenêtres visiblement existantes.
~/.config/hidden_windows
, pour être mappé lors de votre prochain choix. Toggle Firefox du menu.#!/usr/bin/env python3
import subprocess
import os
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3
import time
app = "firefox"
winsdir = os.path.join(os.environ["HOME"], ".config/hidden_windows")
try:
os.mkdir(winsdir)
except FileExistsError:
pass
def checkruns(app):
try:
return subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
except subprocess.CalledProcessError:
for w in os.listdir(winsdir):
if w.startswith(app):
os.remove(os.path.join(winsdir, w))
def get_currentwins(pid):
wins = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").splitlines()
return [l.split()[0] for l in wins if pid in l]
def hide_currentwins(matches):
# open(os.path.join(winsdir, "windowlist"), "wt").write("\n".join(matches))
for w in matches:
open(os.path.join(winsdir, app+"_"+w), "wt")
subprocess.Popen(["xdotool", "windowunmap", w])
def run_app(app):
subprocess.Popen(app)
while True:
time.sleep(1)
pid = checkruns(app)
matches = get_currentwins(pid) if pid else None
if matches:
hide_currentwins(matches)
break
def restore_wins():
for w in [w for w in os.listdir(winsdir) if w.startswith(app)]:
wid = w.split("_")[-1]
subprocess.Popen(["xdotool", "windowmap", wid])
os.remove(os.path.join(winsdir, w))
def toggle_app(*args):
pid = checkruns(app)
if pid:
matches = get_currentwins(pid)
if matches:
hide_currentwins(matches)
else:
restore_wins()
else:
subprocess.Popen(app)
run_app(app)
class Indicator():
def __init__(self):
self.app = 'toggle_app'
self.indicator = AppIndicator3.Indicator.new(
self.app, app,
AppIndicator3.IndicatorCategory.OTHER)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
def create_menu(self):
self.menu = Gtk.Menu()
item_toggle = Gtk.MenuItem('Toggle '+app)
item_toggle.connect("activate", toggle_app)
self.menu.append(item_toggle)
sep1 = Gtk.SeparatorMenuItem()
self.menu.append(sep1)
item_quit = Gtk.MenuItem('Quit')
item_quit.connect('activate', self.stop)
self.menu.append(item_quit)
self.menu.show_all()
return self.menu
def stop(self, source):
Gtk.main_quit()
Indicator()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
Le script nécessite à la fois wmctrl
et xdotool
Sudo apt-get install wmctrl xdotool
Copiez le script dans un fichier vide, enregistrez-le sous le nom firefox_bg.py
Test_run le script par la commande:
python3 /path/to/firefox_bg.py
Si tout fonctionne correctement, ajoutez-le à Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 10 && python3 /path/to/firefox_bg.py"
Autrement, copiez le code ci-dessous dans un fichier vide, enregistrez-le sous le nom firefox_bgrunner.desktop
dans ~/usr/share/applications
, déconnectez-vous puis reconnectez-vous.
[Desktop Entry]
Type=Application
Exec=python3 /path/to/firefox_bg.py
Name=Firefox Webbrowser Background Runner
Icon=firefox
StartupWMClasss=nonsense
* La dernière ligne, StartupWMClasss=nonsense
consiste à s'assurer que Firefox windows will appear under their own icon, not the one of the indicator
.
Inutile de mentionner que vous devez éditer la ligne Exec=
pour refléter le chemin réel (absolu) de l'emplacement où vous avez stocké firefox_bg.py
Ensuite, vous aurez le coureur du panneau disponible à partir de Dash:
J'ai testé la même procédure avec gnome-terminal
andThunderbird
(ce dernier n’est généralement pas le plus rapide au démarrage), et cela fonctionne parfaitement:
Pour utiliser avec d'autres applications, éditez simplement la ligne:
app = "firefox"
Remarque Cependant, certaines applications semblent vérifier si leur tentative de créer une fenêtre a réussi et créer un deuxième si le premier est non mappé. Cela m'est arrivé avec Inkscape
.
Le script peut quand même parfaitement être utilisé, mais nécessiterait une petite modification. Si quelqu'un a besoin de l'utiliser avec Inkscape
, laissez un commentaire.
J'aimerais proposer une solution 2019 à cela pour Ubuntu 18-19 + avec GNOME, qui est un peu plus simple (IMO) et utilise bash au lieu de python par souci de simplicité. J'ai fait ceci pour que Firefox demande mon mot de passe principal lors de ma connexion, mais ne le redemandez pas à moins que je ne voie les mots de passe. J'étais fatigué de le voir apparaître chaque fois que j'ai démarré Firefox.
Commencez par installer les dépendances:
Sudo apt-get update && apt-get install -y wmctrl xdotool
Ensuite, mettez ce script quelque part, dites /data/system/bin/firefox-background
:
firefox "about:blank" &
WAITFOR="Mozilla Firefox"
APP=$(wmctrl -lp |grep "${WAITFOR}" |awk '{print $1}')
while [ -z "${APP}" ]; do
sleep 1
APP=$(wmctrl -lp |grep "${WAITFOR}" |awk '{print $1}')
done
xdotool windowunmap ${APP}
Et:
chmod +x /data/system/bin/firefox-background
Vous pouvez maintenant exécuter ce script comme vous le souhaitez, par exemple depuis une fenêtre de terminal ou depuis le démarrage de GNOME avec un fichier dans .config/autostart/FirefoxBackground.desktop
:
[Desktop Entry]
Name=Firefox Background
Exec=/data/system/bin/firefox-background
Terminal=false
Icon=firefox
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true
StartupWMClasss=nonsense
Après cela, vous obtiendrez une fois le popup pour le mot de passe principal, et plus jamais, sauf si vous avez l'intention d'accéder à des informations sécurisées.