LinuxQuestions.org
Visit Jeremy's Blog.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices


Reply
  Search this Thread
Old 08-10-2019, 06:35 AM   #1
luxbeginner
LQ Newbie
 
Registered: Aug 2019
Posts: 8

Rep: Reputation: Disabled
Question How to correctly install Tor Browser as downloaded application and include it properly into the system?


Hello everybody

I am quite new to Linux, so I already apologize if I use terms incorrectly! I am dealing with a problem for a few days now and I am just able to solve it by myself and my online research, so hopefully somebody can help me out.

There is a TLDR; at the end of the post, if somebody does not want to read through all of this.


my situation:
I installed Linux Mint 19.1 Tessa x86_64 with Cinnamon 4.0.10. Now what I try to do is installing Tor Browser, which I finally after 3 days of hustle was able to do. Quick explanation regarding this: First I tried to install it as I did with my other applications via apt-get install torbrowser-launcher, now the problem was that I had a PGP signing key issue. After I finally managed somehow to wrap the concept of PGP signing around my head more or less, I had this issue where there always were signing problems. I later found out after that it probably was due to poisoned PGP certificates [1]. So I tried a lot of stuff then with those helpful posts and articles [2] [3] and at the end managed to change the keyserver in my ~/.gnupg/dirmngr.conf to keyserver hkps://keys.openpgp.org.

Question 1: Is this in general a good idea or did I miss anything on that topic that could be done better?

So at the end I removed torbrowser-launcher again and downloaded it directly from https://www.torproject.org/download/ as a tar.xz file and signed it with the tar.xz.asc signature from their website. Now I have to say I am quite unfamiliar with how the whole 'installing software on Linux'-process should be done correctly, so far as mentioned I usually used apt-get install to install my software. Now as far as I understood the FHS [4] somehow correctly I should copy the extracted application folder to /opt.

Question 2: Is this done correctly or should the application folder be somewhere else?

Now I am at the state where I can run the Tor Browser, but I can not add it to the preferred applications. If I go in the GUI to System Settings > Preferred Applications and then try to pick Tor Browser as Web standard application it does not even show up in the dropdown menu.

So what I found out is that there is a file ~/.config/mimeapps.list which lists up all kind of applications and also has 2 lines regarding how to handle http & https links:
Code:
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
Now I already took Tor Browser, which seems to be start-tor-browser.desktop when I look at it in the terminal via ls -ll and essentially runs the command:
Code:
sh -c '"/opt/tor-browser_en-US/Browser/start-tor-browser  --new-window" --detach || ([ !  -x "/opt/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k
and added it to /usr/share/applications and to ~/.local/share/applications. So when I change the line of ~/.config/mimeapps.list file to this:
Code:
x-scheme-handler/http=start-tor-browser.desktop
x-scheme-handler/https=start-tor-browser.desktop
then it does use the Tor Browser to open my urls (eg. from a text document). But then the error appears:
Quote:
Tor Browser is already running, but is not responding. To open a new window, you must first close the existing Tor Browser process, or restart your system.
.


So I feel a bit lost and probably made quite a few rookie mistakes. As mentioned I lack a lot of understanding how the whole 'application install process, how to manage installed software, where to put them in the file system and how to include them to the system' works. I hope somebody could sprinkle a bit of knowledge over my fresh Linux mind and I appreciate if somebody even already read through the whole post here. Thanks a lot!


TLDR;
Main Question:
- How can I make Tor Browser (installed as a downloaded application + moved to /opt and not via apt-get in /bin) be accessible in the "known applications" for Linux. So that for example I can pick it from the dropdown menu in Preferred Applications?
- How can I open links from a text document then directly with the Tor Browser even if I already run an instance of Tor Browser and not get the error that Tor Browser is already running?
- How in general can I include downloaded applications which I put in /opt better to the system, so that the system recognizes them as good as the applications installed eg. via apt-get install?




References:
[1] https://www.reddit.com/r/TOR/comment...y_gpg/eu7oxq1/
[2] https://tech.michaelaltfield.net/201...-certificates/
[3] https://gist.github.com/rjhansen/67a...5f#mitigations
[4] https://en.wikipedia.org/wiki/Filesy...archy_Standard
 
Old 08-10-2019, 11:15 AM   #2
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,574
Blog Entries: 19

Rep: Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453
I know very little about tor, but the problems you have run into are fairly typical of what happens when you install software by hand behind your package manager's back. It's a pity you had all that key signature trouble because installing via apt would have spared you your later problems. However things are always correctable in Linux; it just requires some extra work.

When apt installs a program package, it automatically updates desktop menus so that the program can be run from them. In addition, it installs the package files in places where they can easily be found. Application commands go into /usr/bin. Traditionally stuff that you install yourself goes somewhere else, either in /usr/local/bin or in /opt. /opt is commonly used for self-installed binary packages such as browsers, /usr/local for stuff that you built yourself from source.

The first thing I would do therefore would be to create a symbolic link in /usr/bin to your tor browser. You need to do this as root. I don't know if this alone will make it a "known application" but it's certainly a useful first step because this directory is where your system expects to find commands. There will be a script somewhere that you can then run to update your menus; someone else who uses Mint can point you to it.

I think your window problem is probably due to the fact that you are demanding a new window each time you run tor. Maybe you should not use that option in the command. But like I said, I'm no expert on tor.
 
2 members found this post helpful.
Old 08-10-2019, 11:59 AM   #3
DavidMcCann
LQ Veteran
 
Registered: Jul 2006
Location: London
Distribution: PCLinuxOS, Debian
Posts: 6,142

Rep: Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314Reputation: 2314
Hazel is right to say that you should usually stick to the repository, but in this case that's not so — Tor recommends that the Ubuntu package should not be used, and that's probably what you get from Mint.

Good instructions can be found at
https://www.howtogeek.com/423866/how...wser-on-linux/
That includes the command to launch the browser from an installation in /opt, which you can run from the terminal or create a menu entry by using the menu editor.
 
2 members found this post helpful.
Old 08-11-2019, 08:53 AM   #4
ondoho
LQ Addict
 
Registered: Dec 2013
Posts: 19,872
Blog Entries: 12

Rep: Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053
The version on my system comes with two additional files:

/usr/bin/tor-browser
Code:
#!/usr/bin/env bash

# Copyright (C) 2009 Benjamin Drung <bdrung at ubuntu dot com>
# Copyright (C) 2012 Alessio Sergi <al3hex at gmail dot com>
# Copyright (C) 2017 grufo <madmurphy333 at gmail dot com> (Arch User Repository version)
# modified 2012 for tor-browser (Max Roder <maxroder at web dot de>)
# modified 2014 by Yardena Cohen <yardenack at gmail dot com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

set -e


# filled by PKGBUILD
_TB_PKGNAME_='tor-browser'
_TB_VERSION_='8.5.4'
_TB_RELEASE_='1'
_TB_LANGUAGE_="en-US"
_TB_ARCH_='linux64'

# other constants and variables
_TB_HOME_DIR_=~/".${_TB_PKGNAME_}"
_TB_VER_FILE_="${_TB_HOME_DIR_}/VERSION"
_TB_LOG_FILE_="${_TB_HOME_DIR_}/LOG"
_TB_APP_DIR_="${_TB_HOME_DIR_}/app"
_TB_REFRESH_=0


# syntax: _notify_ "${TITLE}" "${MESSAGE}"
_notify_() {

	if [ $(which zenity 2>/dev/null) ]; then
		zenity --info --title "${1}" --text "${2}"
	elif [ $(which notify-send 2>/dev/null) ]; then
		notify-send "${1}" "${2}"
	elif [ $(which kdialog 2>/dev/null) ]; then
		kdialog --title "${1}" --passivepopup "${2}"
	else
		echo -e "${0}: [${1}] ${2}" >&2
	fi

}


# syntax: _compare_ver_ "${INSTALLED_VERSION}" "${LATEST_VERSION}"
_compare_ver_() {

	[[ "${1}" == "${2}" ]] && return 1 || [[ "${1}" == "`echo -e "${1}\n${2}" | sort -V | head -n1`" ]]

}


_refresh_local_() {

	local KEEP_DIR="${_TB_APP_DIR_}/Browser/TorBrowser/Data/Browser"
	local KEPT_DIR=~/".${_TB_PKGNAME_}-tmpdata"
	local DIR_IS_KEPT=0

	if [[ -d "${KEEP_DIR}" ]]; then
		[[ -d "${KEPT_DIR}" ]] && rm -rf "${KEPT_DIR}"
		mv "${KEEP_DIR}" "${KEPT_DIR}"
		echo "${0}: Preserving files in ${KEPT_DIR}/." >> "${_TB_LOG_FILE_}"
		DIR_IS_KEPT=1
	fi

	echo "${0}: Extracting files to ${_TB_APP_DIR_}." >> "${_TB_LOG_FILE_}"
	rm -rf "${_TB_APP_DIR_}"/*
	tar --strip-components=1 -xJf "/opt/${_TB_PKGNAME_}/tor-browser-${_TB_ARCH_}-${_TB_VERSION_}_${_TB_LANGUAGE_}.tar.xz" \
		-C "${_TB_APP_DIR_}" >> "${_TB_LOG_FILE_}" 2>&1 || _notify_ 'Error' \
		"The tor-browser archive could not be extracted to your home directory. \
		\nCheck permissions of ${_TB_APP_DIR_}. \
		\nThe error log can be found in ${_TB_LOG_FILE_}."

	if [[ ! ${DIR_IS_KEPT} -eq 0 ]]; then
		rm -rf "${KEEP_DIR}"
		mv "${KEPT_DIR}" "${KEEP_DIR}"
	fi

	[[ -f "${_TB_APP_DIR_}/Browser/start-tor-browser" ]] && echo "${_TB_VERSION_}" > "${_TB_VER_FILE_}"

}


_aur_update_() {

	if [[ "$(id -u)" == '0' ]]; then
		echo 'It is not a good idea to do this as root. Abort.' 1>&2
		exit 1
	fi

	local DO_UPDATE=0
	local TMP_PKGBUILD="$(mktemp -d)"

	cd "${TMP_PKGBUILD}"

	if ! { curl --silent --fail "https://aur.archlinux.org/cgit/aur.git/snapshot/${_TB_PKGNAME_}.tar.gz" | tar xz ;} 2>/dev/null; then
		echo 'Unable to retrieve the PKGBUILD. Abort.' 1>&2
		rm -rf "${TMP_PKGBUILD}"
		exit 1
	fi

	cd "${TMP_PKGBUILD}/${_TB_PKGNAME_}"

	local AUR_VERSION="$(grep 'pkgver' '.SRCINFO' | cut -d = -f2 | sed -e 's/^[[:space:]]*//')"
	local AUR_RELEASE="$(grep 'pkgrel' '.SRCINFO' | cut -d = -f2 | sed -e 's/^[[:space:]]*//')"

	if _compare_ver_ "${_TB_VERSION_}" "${AUR_VERSION}"; then
		echo "Found new version (${_TB_VERSION_} -> ${AUR_VERSION})..."
		DO_UPDATE=1
	elif [[ "${_TB_VERSION_}" == "${AUR_VERSION}" ]] && [[ "${_TB_RELEASE_}" != "${AUR_RELEASE}" ]] && [[ "${_TB_RELEASE_}" == "`echo -e "${_TB_RELEASE_}\n${AUR_RELEASE}" | sort | head -n1`" ]]; then
		echo 'Found new PKGBUILD...'
		DO_UPDATE=1
	else
		echo "Everything is up to date (current version: ${_TB_VERSION_})."
	fi

	[[ ! ${DO_UPDATE} -eq 0 ]] && makepkg -si

	rm -rf "${TMP_PKGBUILD}"

}


_usage_() {

	cat <<EOF
Usage: ${0##*/} [option]

Options:
  -h|--help         Show this help message and exit
  -u|--update       Search in AUR for a new release and install it
  -r|--refresh      Refresh the copy in your home directory and launch tor-browser
  -e|--erase        Erase the copy in your home directory
  --dir=<directory> The Tor-Browser directory to use

  All unrecognized arguments will be passed to the browser.
EOF

}


args=()
for arg; do
	case "${arg}" in
		-h|--help) _usage_; exit 0 ;;
		-u|--update) _aur_update_; exit 0 ;;
		-f|--refresh) _TB_REFRESH_=1 ;;
		-e|--erase) rm -rf "${_TB_HOME_DIR_}"; exit 0 ;;
		--dir=*) _TB_HOME_DIR_="${arg#*=}" ;;
		*) args+=("$arg") ;;
	esac
done

# create directory, if it is missing (e.g. first run)
[[ ! -d "${_TB_APP_DIR_}" ]] && mkdir -p "${_TB_APP_DIR_}"
cd "${_TB_HOME_DIR_}"

# create version file if missing
[[ ! -f "${_TB_VER_FILE_}" ]] && echo 0 > "${_TB_VER_FILE_}"

# get the installed version
while read _TB_VER_LINE_
do
	_TB_INSTALLED_VERSION_="${_TB_VER_LINE_}"
done < "${_TB_VER_FILE_}"

# start update if old or no tor-browser is installed
if [[ "${_TB_INSTALLED_VERSION_}" == "${_TB_VERSION_}" ]] && [[ ${_TB_REFRESH_} -eq 0 ]]; then
	# clear log
	> "${_TB_LOG_FILE_}"
else
	echo "${0}: Your version in ${_TB_HOME_DIR_} is outdated or you do not have installed ${_TB_PKGNAME_} yet." > "${_TB_LOG_FILE_}"
	_refresh_local_
fi

# start tor-browser
"${_TB_APP_DIR_}/Browser/start-tor-browser" "${args[@]}"
and /usr/share/applications/tor-browser.desktop
Code:
[Desktop Entry]
Version=1.0
Type=Application
Name=Tor Browser (en-US)
Exec=/usr/bin/tor-browser
Icon=tor-browser
Categories=Network;
Comment=Anonymous browsing using Firefox and Tor
hth.
 
1 members found this post helpful.
Old 08-17-2019, 05:49 AM   #5
luxbeginner
LQ Newbie
 
Registered: Aug 2019
Posts: 8

Original Poster
Rep: Reputation: Disabled
Hi all, thanks for replying!

Quote:
Originally Posted by hazel View Post
It's a pity you had all that key signature trouble because installing via apt would have spared you your later problems. However things are always correctable in Linux; it just requires some extra work.
Hmm as far as I understood this was not the case, also see the post below from David. Maybe I wrote it not in the correct English to understand, but actually I first did the normal installation with apt-get, but this gave me all the trouble with the poisoned signing keys. Because of that I actually decided to do it manually by hand by myself.


Quote:
Originally Posted by hazel View Post
Traditionally stuff that you install yourself goes somewhere else, either in /usr/local/bin or in /opt. /opt is commonly used for self-installed binary packages such as browsers, /usr/local for stuff that you built yourself from source.
Thank you for the explanation, I read that as well but have a hard time understanding what exactly is the difference between "self-installed binary packages" and "stuff that I built myself from source". Coming from a non-Linux background these terms are quite new to me..


Quote:
Originally Posted by hazel View Post
The first thing I would do therefore would be to create a symbolic link in /usr/bin to your tor browser. You need to do this as root. I don't know if this alone will make it a "known application" but it's certainly a useful first step because this directory is where your system expects to find commands. There will be a script somewhere that you can then run to update your menus; someone else who uses Mint can point you to it.
So as mentioned I added it to /usr/share/applications and to ~/.local/share/applications which is probably why I can access it now via the Start Menu (I hope this is the correct term for Linux).

================================



Quote:
Originally Posted by DavidMcCann View Post
Good instructions can be found at
https://www.howtogeek.com/423866/how...wser-on-linux/
That includes the command to launch the browser from an installation in /opt, which you can run from the terminal or create a menu entry by using the menu editor.
Yes great article, it was actually the exact article I did use at the end. As mentioned my tor browser also works with this setup and I am also able to start it from the Start Menu. My only thing that I currently am not able to do is, if I already run a tor browser instance (so I already have a few websites open) and now I want to open a URL link (eg. from a markup document with a normal HTTPS link) it always opens on Firefox (because of the ~/.config/mimeapps.list file mentioned above in my original post). If I edit firefox there to tor-browser it wants to open the link in the tor browser, but I get the above mentioned error message:
Quote:
Tor Browser is already running, but is not responding. To open a new window, you must first close the existing Tor Browser process, or restart your system.
================================


Quote:
Originally Posted by ondoho View Post
The version on my system comes with two additional files:
Can I ask, how you installed your tor browser (via apt-get or manually like me how I described it?)

The first file (/usr/bin/tor-browser) I was not able to find in my system, but I have the following file:
/opt/tor-browser_en-US/start-tor-browser.desktop
Quote:
#!/usr/bin/env ./Browser/execdesktop
#
# This file is a self-modifying .desktop file that can be run from the shell.
# It preserves arguments and environment for the start-tor-browser script.
#
# Run './start-tor-browser.desktop --help' to display the full set of options.
#
# When invoked from the shell, this file must always be in a Tor Browser root
# directory. When run from the file manager or desktop GUI, it is relocatable.
#
# After first invocation, it will update itself with the absolute path to the
# current TBB location, to support relocation of this .desktop file for GUI
# invocation. You can also add Tor Browser to your desktop's application menu
# by running './start-tor-browser.desktop --register-app'
#
# If you use --register-app, and then relocate your TBB directory, Tor Browser
# will no longer launch from your desktop's app launcher/dock. However, if you
# re-run --register-app from inside that new directory, the script
# will correct the absolute paths and re-register itself.
#
# This file will also still function if the path changes when TBB is used as a
# portable app, so long as it is run directly from that new directory, either
# via the shell or via the file manager.

[Desktop Entry]
Type=Application
Name=Tor Browser
GenericName=Web Browser
Comment=Tor Browser is +1 for privacy and -1 for mass surveillance
Categories=Network;WebBrowser;Security;
Exec=sh -c '"/opt/tor-browser_en-US/Browser/start-tor-browser" --detach || ([ ! -x "/opt/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k
X-TorBrowser-ExecShell=./Browser/start-tor-browser --detach
Icon=/opt/tor-browser_en-US/Browser/browser/chrome/icons/default/default128.png
StartupWMClass=Tor Browser

The second file, that you mentioned (/usr/share/applications/tor-browser.desktop), was also there for me, but it is the one I copied myself there and it has a different content in comparison to yours:
Quote:
[Desktop Entry]
Type=Application
Name=Tor Browser
GenericName=Web Browser
Comment=Tor Browser is +1 for privacy and -1 for mass surveillance
Categories=Network;WebBrowser;Security;
Exec=sh -c '"/opt/tor-browser_en-US/Browser/start-tor-browser --new-window" --detach || ([ ! -x "/opt/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k
X-TorBrowser-ExecShell=./Browser/start-tor-browser --detach
Icon=/opt/tor-browser_en-US/Browser/browser/chrome/icons/default/default128.png
StartupWMClass=Tor Browser
 
Old 08-17-2019, 10:00 AM   #6
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,574
Blog Entries: 19

Rep: Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453Reputation: 4453
Quote:
Originally Posted by luxbeginner View Post
Thank you for the explanation, I read that as well but have a hard time understanding what exactly is the difference between "self-installed binary packages" and "stuff that I built myself from source". Coming from a non-Linux background these terms are quite new to me..
Basically there are three ways of getting software onto your system:

1) Via your package manager. This is the best way if it works (and it usually does without trouble) because you can then update it via the package manager.

2) By downloading and installing a binary package which someone else has built. This is how some people install packages like Firefox and Libreoffice, if you want the latest version and your package manager doesn't provide that. FF and LO are actually designed to be installed this way; they come with their own libraries and they are very good at keeping those safely insulated from the rest of your system. In general though, it is not a good idea to install binary packages behind your package manager's back. Sometimes they prove incompatible with your system, and also the package manager has no record of them and can't update them.

3) By downloading a source code package, and building and installing it yourself. The build process turns the source into binary code and the install step copies this to suitable locations. Traditionally separate folders are used for self-built programs as I mentioned in my previous post. Because the programs were built locally, they will link correctly to the libraries you already have, so this is safer than installing a binary package, but you still have the problem that the package manager doesn't know anything about the package and therefore can't manage it.

Hope that makes things clearer!
 
Old 08-18-2019, 01:01 AM   #7
ondoho
LQ Addict
 
Registered: Dec 2013
Posts: 19,872
Blog Entries: 12

Rep: Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053Reputation: 6053
The thing is that the Tor project recommends to update its browser much, much more often than apt could ever provide, be it on debian or on ubuntu.

Quote:
Originally Posted by luxbeginner View Post
Can I ask, how you installed your tor browser (via apt-get or manually like me how I described it?)
I installed it from the AUR. Forget about it, it's not for *buntu.

Quote:
The first file (/usr/bin/tor-browser) I was not able to find in my system, but I have the following file:
/opt/tor-browser_en-US/start-tor-browser.desktop
That looks pretty horrible to me.

I posted that shell script because it does not change, however the browser itself gets updated.
You could put that script in ~/bin and use it to start tor-browser.
The .desktop file then also points to that script instead of the ugliness you have there now.

You can unzip the Browser to a location of your choice (under your $HOME) and adapt the script I provided to start it, and copy the .desktop file (which also doesn't change across Browser updates) to ~/.local/share/applications.
That would be the system integration.
From then onwards, the browser can be updated from within the browser itself.

PS: ~ expands to $HOME expands to /home/username - e.g. /home/luxbeginner
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
Tor Browser Bundle/Tor and IPTables: Solution Needed Nonetas Linux - Networking 3 03-01-2018 11:27 PM
Tor Browser Bundle/Tor and IPTables: Working Solution Sought Nonetas Linux - Security 1 01-14-2018 06:23 PM
LXer: Tails 2.6 Anonymous Linux Live CD Is Out, Brings Tor 0.2.8.7 and Tor Browser 6.0.5 LXer Syndicated Linux News 0 09-21-2016 01:32 AM

LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie

All times are GMT -5. The time now is 04:31 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration