# Tor Browser Launcher
-_**Are you getting an error?** Sometimes updates in Tor Browser itself will break Tor Browser Launcher. There's a good chance that the problem you're experiencing has already been fixed in the [newest version](https://github.com/micahflee/torbrowser-launcher/releases), but Linux distributions can be slow to provide up-to-date packages. In this case, you can install from the PPA (instructions below), or [build from source](/BUILD.md)._
+_**Are you getting an error?** Sometimes updates in Tor Browser itself will break Tor Browser Launcher. There's a good chance that the problem you're experiencing has already been fixed in the [newest version](https://github.com/micahflee/torbrowser-launcher/releases). Try installing from Flatpak (instructions below), or [build from source](/BUILD.md)._
Tor Browser Launcher is intended to make Tor Browser easier to install and use for GNU/Linux users. You install ```torbrowser-launcher``` from your distribution's package manager and it handles everything else:
![Tor Browser Launcher screenshot](/screenshot.png)
-# Installing from the PPA
+# Installing
-If you want to always have the latest version of the `torbrowser-launcher` package before your distribution gets it, you can use my PPA:
+You can install `torbrowser-launcher` from your operating system's package manager, but it might be out-of-date and have issues working. If you want to make sure you always have the latest version, use one of the methods below to install:
+
+## Installing in any Linux distro using Flatpak
+
+Install Flatpak using these [instructions](https://flatpak.org/setup/).
+
+Then install `torbrowser-launcher` like this:
+
+```
+flatpak install flathub com.github.micahflee.torbrowser-launcher -y
+```
+
+Run `torbrowser-launcher` either by using the GUI desktop launcher, or by running:
+
+```
+flatpak run com.github.micahflee.torbrowser-launcher
+```
+
+## Installing from the PPA
+
+If you use Ubuntu or one of its derivatives:
```sh
sudo add-apt-repository ppa:micahflee/ppa
+sudo apt update
sudo apt install torbrowser-launcher
```
+
+Run `torbrowser-launcher` either by using the GUI desktop launcher, or by running:
+
+```
+torbrowser-launcher
+```
\ No newline at end of file
owner @{torbrowser_home_dir}/firefox rix,
owner @{torbrowser_home_dir}/{,TorBrowser/UpdateInfo/}updates/[0-9]*/* rw,
owner @{torbrowser_home_dir}/{,TorBrowser/UpdateInfo/}updates/[0-9]*/{,MozUpdater/bgupdate/}updater ix,
+ owner @{torbrowser_home_dir}/updater ix,
owner @{torbrowser_home_dir}/TorBrowser/Data/Browser/.parentwritetest rw,
owner @{torbrowser_home_dir}/TorBrowser/Data/Browser/profiles.ini r,
owner @{torbrowser_home_dir}/TorBrowser/Data/Browser/profile.default/{,**} rwk,
owner @{torbrowser_home_dir}/TorBrowser/Data/fontconfig/fonts.conf r,
+ owner @{torbrowser_home_dir}/fonts/* l,
owner @{torbrowser_home_dir}/TorBrowser/Tor/tor px,
owner @{torbrowser_home_dir}/TorBrowser/Tor/ r,
owner @{torbrowser_home_dir}/TorBrowser/Tor/*.so mr,
owner @{torbrowser_home_dir}/TorBrowser/Tor/*.so.* mr,
+ owner @{torbrowser_home_dir}/TorBrowser/Tor/libstdc++/*.so mr,
+ owner @{torbrowser_home_dir}/TorBrowser/Tor/libstdc++/*.so.* mr,
# parent Firefox process when restarting after upgrade, Web Content processes
- owner @{torbrowser_firefox_executable} ixmr -> torbrowser_firefox,
+ owner @{torbrowser_firefox_executable} pxmr -> torbrowser_firefox,
/etc/mailcap r,
/etc/mime.types r,
# Required for multiprocess Firefox (aka Electrolysis, i.e. e10s)
owner /{dev,run}/shm/org.chromium.* rw,
+ owner /dev/shm/org.mozilla.ipc.[0-9]*.[0-9]* rw, # for Chromium IPC
# Deny access to DRM nodes, that's granted by the X abstraction, which is
# sourced by the gnome abstraction, that we include.
deny /sys/devices/system/cpu/cpufreq/policy[0-9]*/cpuinfo_max_freq r,
deny /sys/devices/system/cpu/*/cache/index[0-9]*/size r,
deny /run/user/[0-9]*/dconf/user rw,
+ deny /usr/bin/lsb_release x,
+ deny capability sys_admin,
# Silence denial logs about PulseAudio
deny /etc/pulse/client.conf r,
/etc/xfce4/defaults.list r,
/usr/share/xfce4/applications/ r,
+ # u2f (tested with Yubikey 4)
+ /sys/class/ r,
+ /sys/bus/ r,
+ /sys/class/hidraw/ r,
+ /run/udev/data/c24{7,9}:* r,
+ /dev/hidraw* rw,
+ # Yubikey NEO also needs this:
+ /sys/devices/**/hidraw/hidraw*/uevent r,
+
#include <local/torbrowser.Browser.firefox>
}
# Support some of the included pluggable transports
owner @{torbrowser_home_dir}/TorBrowser/Tor/PluggableTransports/** rix,
@{PROC}/sys/net/core/somaxconn r,
+ #include <abstractions/ssl_certs>
# Silence file_inherit logs
deny @{torbrowser_home_dir}/{browser/,}omni.ja r,
deny @{torbrowser_home_dir}/TorBrowser/Data/Browser/profile.default/.parentlock rw,
deny @{torbrowser_home_dir}/TorBrowser/Data/Browser/profile.default/extensions/*.xpi r,
deny @{torbrowser_home_dir}/TorBrowser/Data/Browser/profile.default/startupCache/* r,
+ # Silence logs from included pluggable transports
+ deny /etc/hosts r,
+ deny /etc/services r,
@{PROC}/sys/kernel/random/uuid r,
/sys/devices/system/cpu/ r,
#: __init__.py:66
msgid "By Micah Lee, licensed under MIT"
-msgstr "Par Micah Lee, sous license MIT"
+msgstr "Par Micah Lee, sous licence MIT"
#: __init__.py:67
#, python-brace-format
msgid "version {0}"
-msgstr ""
+msgstr "version {0}"
#: common.py:100
#, python-brace-format
#: common.py:187
msgid "Creating GnuPG homedir"
-msgstr "Creation du dossier GnuPG"
+msgstr "Création du dossier GnuPG"
#: common.py:254
#, python-format
msgid "Could not import key with fingerprint: %s."
-msgstr "Impossible d'importer la clé: %s"
+msgstr "Impossible d'importer la clé avec l'empreinte : %s."
#: common.py:259
msgid "Not all keys were imported successfully!"
-msgstr "Certaines clés n'ont pas pu être importées"
+msgstr "Certaines clés n'ont pas pu être importées !"
#: launcher.py:83
-#, fuzzy
msgid "Downloading Tor Browser for the first time."
-msgstr "Premier téléchargement et installation du Tor Browser"
+msgstr "Téléchargement du Navigateur Tor pour la première fois."
#: launcher.py:85
-#, fuzzy
msgid ""
"Your version of Tor Browser is out-of-date. Downloading the newest version."
msgstr ""
-"Votre version du Tor Browser est obsolète. Téléchargement et installation de "
-"la nouvelle version."
+"Votre version du Navigateur Tor est obsolète. Téléchargement de la nouvelle "
+"version."
#: launcher.py:100
msgid "Downloading over Tor"
#: launcher.py:111
msgid "Tor Browser"
-msgstr "Tor Browser"
+msgstr "Navigateur Tor"
#: launcher.py:128
msgid "Start"
#: launcher.py:174
msgid "Yes"
-msgstr ""
+msgstr "Oui"
#: launcher.py:178
msgid "Exit"
-msgstr ""
+msgstr "Quitter"
#: launcher.py:192 settings.py:136
msgid "Cancel"
#: launcher.py:238
msgid "Latest version: {}"
-msgstr "Dernière version: {}"
+msgstr "Dernière version : {}"
#: launcher.py:241
msgid "Error detecting Tor Browser version."
-msgstr "Impossible de détecter la version du Tor Browser."
+msgstr "Impossible de détecter la version du Navigateur Tor."
#: launcher.py:256 launcher.py:357
msgid "Verifying Signature"
#: launcher.py:279 launcher.py:295
msgid "(over Tor)"
-msgstr ""
+msgstr "(à travers Tor)"
#: launcher.py:293
msgid "Downloaded"
"The version of Tor Browser you have installed is earlier than it should be, "
"which could be a sign of an attack!"
msgstr ""
-"La version du Tor Browser installée est antérieure à l'actuelle, ce qui peut "
-"être la signature d'une attaque!"
+"La version du Navigateur Tor que vous avez installé est antérieure à ce "
+"qu'elle devrait, ce qui peut être le signe d'une attaque !"
#: launcher.py:446
-#, fuzzy
msgid "Downloading Tor Browser over again."
-msgstr "Nouveau téléchargement du Tor Browser Bundle."
+msgstr "Télécharger le Navigateur Tor à nouveau."
#: launcher.py:516 launcher.py:525 launcher.py:533
msgid "Download Error:"
-msgstr "Erreur de téléchargement:"
+msgstr "Erreur de téléchargement :"
#: launcher.py:517
msgid "You are currently using a non-default mirror"
-msgstr "Vous utilisez actuellement un miroir non-défaut"
+msgstr "Vous utilisez actuellement un miroir n'étant pas celui par défaut"
#: launcher.py:518
msgid "Would you like to switch back to the default?"
-msgstr "Voulez-vous revenir à la valeur par défaut?"
+msgstr "Voulez-vous revenir à la valeur par défaut ?"
#: launcher.py:527
msgid "Would you like to try the English version of Tor Browser instead?"
-msgstr "Voulez-vous essayer la version anglophone du Tor Browser à la place?"
+msgstr ""
+"Voulez-vous essayer la version anglophone du Navigateur Tor à la place ?"
#: launcher.py:548
#, python-brace-format
"\n"
"You may be under attack."
msgstr ""
+"Certificat SSL invalide pour :\n"
+"{0}\n"
+"\n"
+"Vous pourriez être attaqué."
#: launcher.py:550
msgid "Try the download again using Tor?"
-msgstr "Essayez de télécharger à nouveau à travers Tor?"
+msgstr "Essayer de télécharger à nouveau à travers Tor ?"
#: launcher.py:559
#, python-brace-format
"Trying to download over Tor. Are you sure Tor is configured correctly and "
"running?"
msgstr ""
+"Impossible de démarrer le téléchargement :\n"
+"\n"
+"{0}\n"
+"\n"
+"Essayez de télécharger à travers Tor. Êtes-vous sûr que Tor est configuré "
+"correctement et fonctionne ?"
#: launcher.py:563
#, python-brace-format
"\n"
"Are you connected to the internet?"
msgstr ""
-"Impossible de démarrer le téléchargement:\n"
+"Impossible de démarrer le téléchargement :\n"
"\n"
"{0}\n"
"\n"
-"Êtes-vous connecté à Internet?"
+"Êtes-vous connecté à Internet ?"
#: settings.py:46
msgid "Tor Browser Launcher Settings"
#: settings.py:57
msgid "Force downloading English version of Tor Browser"
-msgstr "Forcer le téléchargement de la version anglophone du Tor Browser"
+msgstr "Forcer le téléchargement de la version anglophone du Navigateur Tor"
#: settings.py:66
msgid "Tor server"
#: settings.py:82
msgid "Status: Installed"
-msgstr "Status: Installé"
+msgstr "Statut : Installé"
#: settings.py:84
msgid "Status: Not Installed"
-msgstr "Status: Pas installé"
+msgstr "Statut : Pas installé"
#: settings.py:87
msgid "Install Tor Browser"
-msgstr "Installer le Tor Browser"
+msgstr "Installer le Navigateur Tor"
#: settings.py:92
msgid "Reinstall Tor Browser"
-msgstr "Réinstaller le Tor Browser"
+msgstr "Réinstaller le Navigateur Tor"
#: settings.py:115
msgid "Mirror"
msgstr "Miroir"
#: settings.py:131
-#, fuzzy
msgid "Save && Exit"
msgstr "Enregistrer et quitter"
datafiles = []
for root, dirs, files in os.walk(SHARE):
- datafiles.append(
- (os.path.join(sys.prefix, root), [os.path.join(root, f) for f in files])
- )
+ if files:
+ datafiles.append((root, [os.path.join(root, f) for f in files]))
# disable shipping apparmor profiles until they work in ubuntu (#128)
if distro != "Ubuntu":
("/etc/apparmor.d/tunables/", ["apparmor/tunables/torbrowser"]),
]
-datafiles += [("/usr/share/locale/", create_mo_files())]
+datafiles += [(os.path.dirname(f), [f]) for f in create_mo_files()]
setup(
name="torbrowser-launcher",
Name[fr]=Tor Browser Launcher configurations
Name[hu]=Tor-böngésző indító beállításai
Name[nl]=Tor Browser Launcher Instellingen
+Name[pt_BR]=Navegador Tor (Configurações do Lançador)
Name[ru]=Tor Browser (настройки запуска)
GenericName=Tor Browser Launcher Settings
GenericName[hu]=Tor-böngésző indító beállításai
Comment[fr]=Tor Browser Launcher configurations
Comment[hu]=Tor-böngésző indító beállításai
Comment[nl]=Tor Browser Launcher Instellingen
+Comment[pt_BR]=Navegador Tor (Configurações do Lançador)
Comment[ru]=Tor Browser (настройки запуска)
Exec=torbrowser-launcher --settings
Terminal=false
[Desktop Entry]
Name=Tor Browser
Name[hu]=Tor-böngésző
+Name[pt_BR]=Navegador Tor
GenericName=Tor browser
GenericName[hu]=Tor böngésző indító
Comment=Launch Tor Browser
Comment[hu]=Tor böngésző indító
+Comment[pt_BR]=Navegador Tor
Exec=torbrowser-launcher %u
Terminal=false
Type=Application
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2014 Micah Lee <micah@micahflee.com> -->
-<component>
- <id>org.torproject.torbrowser.desktop</id>
+<component type="desktop-application">
+ <id>torbrowser.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>MIT</project_license>
<name>Tor Browser Launcher</name>
</screenshots>
<url type="homepage">https://github.com/micahflee/torbrowser-launcher</url>
<update_contact>micah@micahflee.com</update_contact>
+ <content_rating type="oars-1.1"/>
</component>
if self.language not in available_languages:
self.language = "en-US"
+ # get value of environment variable, if it is not set return the default value
+ @staticmethod
+ def get_env(var_name, default_value):
+ value = os.getenv(var_name)
+ if not value:
+ value = default_value
+ return value
+
# build all relevant paths
def build_paths(self, tbb_version=None):
homedir = os.getenv("HOME")
if not os.access(homedir, os.W_OK):
self.set_gui("error", _("{0} is not writable").format(homedir), [], False)
- tbb_config = "{0}/.config/torbrowser".format(homedir)
- tbb_cache = "{0}/.cache/torbrowser".format(homedir)
- tbb_local = "{0}/.local/share/torbrowser".format(homedir)
- old_tbb_data = "{0}/.torbrowser".format(homedir)
+ tbb_config = '{0}/torbrowser'.format(self.get_env('XDG_CONFIG_HOME', '{0}/.config'.format(homedir)))
+ tbb_cache = '{0}/torbrowser'.format(self.get_env('XDG_CACHE_HOME', '{0}/.cache'.format(homedir)))
+ tbb_local = '{0}/torbrowser'.format(self.get_env('XDG_DATA_HOME', '{0}/.local/share'.format(homedir)))
+ old_tbb_data = '{0}/.torbrowser'.format(homedir)
if tbb_version:
# tarball filename