Firefox-Einstellungen automatisch beim Anmelden per VB-Script setzen


Ich betreue einen Windows 2003-Terminal-Server. Dort soll aber dennoch Firefox als Standardbrowser verwendet werden und nicht der Internet Explorer. Da sich aber x Leute dort einloggen können, muss eine Möglichkeit gefunden werden, bestimmte Firefox-Einstellungen vorzugeben, die automatisch angewandt werden, wenn sich diese Person das erste Mal anmeldet. Sehr hilfreich könnte in diesem Zusammenhang FirefoxADM sein, aber für meinen Zweck wäre das Overkill gewesen. So habe ich ein kleines VB-Skript gemacht (oder besser modifiziert), was die für mich wichtigen Einstellungen setzt.

Zuerst muss Firefox zum Standardbrowser gemacht werden. Dazu reicht eine einfach Batch-Datei C:\Windows\setFirefoxDefault.bat mit diesem Inhalt:

@ECHO OFF

"C:\Programme\Mozilla Firefox\firefox.exe" -silent -setDefaultBrowser

Das VB-Script nun klappert alle Firefox-Profile des eingeloggten Nutzers ab und überschreibt in der Datei prefs.js bestimmte Werte. Sollte noch gar kein Profil existieren, wird eines erzeugt. Das Script basiert sehr stark auf dem Script firefox_login.lgns von FirefoxADM, ist aber von mir auf die von mir benötigten Einstellungen geändert worden. Das Script liegt bei mir unter C:\Windows\setFirefoxSettings.vbs.

' Override firefox settings defined in prefs.js in user's profile
' Creates a new profile first if necessary
'
' http://kb.mozillazine.org/About:config_entries
'

Dim FirefoxCacheKey, FirefoxBookmarksKey, DisableXPIInstallations
Dim DisableUpdateNotifications, BrowseWithCaret
Dim StartupHomepage, StartupHomepageReset, StartupHomepageWelcomeURL, StartupHomepageOverrideURL

' Default startup page url
' Set this to "" to skip this setting
StartupHomepage="http://www.bheil.net/blog/"

' If the user requested that their homepage be reset, get the new homepage value from this location
' Set this to "" to skip this setting
StartupHomepageReset="http://www.bheil.net/blog/"

' The URL that Firefox goes to when the user starts up the browser after the initial installation,
' or with a new profile
' http://kb.mozillazine.org/Startup.homepage_welcome_url
' Set this to "" to skip this setting
StartupHomepageWelcomeURL="http://www.bheil.net/blog/"

' The URL that Firefox goes to when the user starts up the browser after upgrading
' http://kb.mozillazine.org/Startup.homepage_override_url
' Set this to "" to skip this setting
StartupHomepageOverrideURL="http://www.bheil.net/blog/"

' Disable XPI (=Extensions) Installations
' Set this to 0 to skip this setting
DisableXPIInstallations = 1

' Disable update notifications
' Set this to 0 to skip this setting
DisableUpdateNotifications = 1

' Number of maximum days to remember visited pages in history (180 in Firefox 3)
' http://kb.mozillazine.org/Browser.history_expire_days
' Set this to 0 to skip this setting
HistoryExpireDays = 60

' Number of minimum days to remember visited pages in history
' http://kb.mozillazine.org/Browser.history_expire_days_min
' Set this to 0 to skip this setting
HistoryExpireDaysMin = 30

' Maximum number of websites to keep in history (40000 in Firefox 3)
' http://kb.mozillazine.org/Browser.history_expire_sites
' Set this to 0 to skip this setting
HistoryExpireSites = 10000

' Max. Cache size in KB
' Set this to 0 to skip this setting
FirefoxCacheKey = 20000

' Standard bookmarks html file (simple Firefox export)
' set to "" to skip this
FirefoxBookmarksKey = "C:\Windows\firefox-standard-bookmarks.html"

' Browse with caret
' http://kb.mozillazine.org/Accessibility.browsewithcaret
' Set this to 0 to skip this setting
BrowseWithCaret = 1

'''''''''''''''''''''''''''''''''''''''''''''''''''''''

set wshShell = WScript.CreateObject("WScript.Shell")
set fso = CreateObject("Scripting.FileSystemObject")

Dim FirefoxProfilePath, FirefoxProfileIniFile, FirefoxPrefsFile, FirefoxProfileFolder, FirefoxProfiles
Dim FirefoxFolder, PrefsFile, ParsePrefsFile, ParseOutPrefsFile, HomePageSetReset, FolderCreate, FirefoxEmptyPrefsFile

on error resume next 

set EnVar = wshShell.environment("Process")
FirefoxProfilePath = EnVar("appdata") & "\Mozilla\Firefox\Profiles"

' Check for an existing firefox profile and create a new one if necessary
if fso.FolderExists(FirefoxProfilePath) = false then
	if fsoFolderExists(EnVar("appdata") & "\Mozilla\Firefox") = false then
		if fsoFolderExists(EnVar("appdata") & "\Mozilla") = false then
			if fsoFolderExists(EnVar("appdata")) = false then
				FolderCreate = fso.CreateFolder(EnVar("appdata"))
			end if
			FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla")
		end if
		FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox")
		' Create a default profiles.ini file
		Set FirefoxProfileIniFile = fso.CreateTextFile(Envar("appdata") & "\Mozilla\Firefox\profiles.ini")
		FirefoxProfileIniFile.WriteLine("[General]")
		FirefoxProfileIniFile.WriteLine("StartWithLastProfile=1")
		FirefoxProfileIniFile.WriteLine("")
		FirefoxProfileIniFile.WriteLine("[Profile0]")
		FirefoxProfileIniFile.WriteLine("Name=default")
		FirefoxProfileIniFile.WriteLine("IsRelative=1")
		FirefoxProfileIniFile.WriteLine("Path=Profiles/yhc73d.default")
		FirefoxProfileIniFile.Close
	end if
	FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox\Profiles")
	FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox\Profiles\yhc73d.default")
	Set FirefoxEmptyPrefsFile = fso.CreateTextFile(Envar("appdata") & "\Mozilla\Firefox\Profiles\yhc73d.default\prefs.js")
	FirefoxEmptyPrefsFile.Close
end if

if fso.FolderExists(FirefoxProfilePath) then
	set FirefoxProfileFolder = fso.GetFolder(FirefoxProfilePath)
	set FirefoxProfiles = FirefoxProfileFolder.SubFolders

	For Each FirefoxFolder in FirefoxProfiles
		FirefoxPrefsFile = FirefoxProfilePath & "\" & FirefoxFolder.Name & "\prefs.js"
		if fso.FileExists(FirefoxPrefsFile) then
                        ' Set startup pages
			if StartupHomepage <> "" then
				RemoveCurrentPrefsFromFile("browser.startup.homepage")
				set tmp = AppendPrefsToFile("browser.startup.homepage", chr(34) & StartupHomepage & chr(34))
				RemoveCurrentPrefsFromFile("browser.startup.page")
				set tmp = AppendPrefsToFile("browser.startup.page", 1)
			end if

        		if StartupHomepageReset <> "" then
				RemoveCurrentPrefsFromFile("browser.startup.homepage_reset")
				set tmp = AppendPrefsToFile("browser.startup.homepage_reset", chr(34) & StartupHomepageReset & chr(34))
			end if

			if StartupHomepageWelcomeURL <> "" then
				RemoveCurrentPrefsFromFile("startup.homepage_welcome_url")
				set tmp = AppendPrefsToFile("startup.homepage_welcome_url", chr(34) & StartupHomepageWelcomeURL & chr(34))
			end if

			if StartupHomepageOverrideURL <> "" then
				RemoveCurrentPrefsFromFile("startup.homepage_override_url")
				set tmp = AppendPrefsToFile("startup.homepage_override_url", chr(34) & StartupHomepageOverrideURL & chr(34))
			end if

			' Cache
			if FirefoxCacheKey > 0 then
				RemoveCurrentPrefsFromFile("browser.cache.disk.capacity")
				set tmp = AppendPrefsToFile("browser.cache.disk.capacity", FirefoxCacheKey)
			end if

			' Disable XPI Installations
			if DisableXPIInstallations = 1 then
				RemoveCurrentPrefsFromFile("xpinstall.enabled")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.confirm")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.chrome")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.skin")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.type.chrome")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.type.skin")
				set tmp = AppendPrefsToFile("xpinstall.enabled", "false")
				set tmp = AppendPrefsToFile("xpinstall.dialog.confirm", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.chrome", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.skin", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.type.chrome", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.type.skin", chr(34) & "sorry-installation-permission-denied" & chr(34))
			end if

			' Copy bookmarks file
			if FirefoxBookmarksKey <> "" then
				if fso.FileExists(FirefoxBookmarksKey) then
					fso.CopyFile FirefoxBookmarksKey, FirefoxProfilePath & "\" & FirefoxFolder.Name & "\bookmarks.html"
				end if
			end if

			' Browse with Caret
			if BrowseWithCaret = 1 then
				RemoveCurrentPrefsFromFile("accessibility.browsewithcaret")
				set tmp = AppendPrefsToFile("accessibility.browsewithcaret", "true")
			end if

			' Disable update notifications
			if DisableUpdateNotifications = 1 then
				RemoveCurrentPrefsFromFile("update.showSlidingNotification")
				set tmp = AppendPrefsToFile("update.showSlidingNotification", "false")
				RemoveCurrentPrefsFromFile("update_notifications.enabled")
				set tmp = AppendPrefsToFile("update_notifications.enabled", "false")
			end if

			' History settings
			if HistoryExpireDays > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_days")
				set tmp = AppendPrefsToFile("browser.history_expire_days", HistoryExpireDays)
			end if

			if HistoryExpireDaysMin > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_days_min")
				set tmp = AppendPrefsToFile("browser.history_expire_days_min", HistoryExpireDaysMin)
			end if

			if HistoryExpireSites > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_sites")
				set	tmp = AppendPrefsToFile("browser.history_expire_sites", HistoryExpireSites)
			end if
		end if
	next
end if

Function RemoveCurrentPrefsFromFile(removeSetting)
	Set ParsePrefsFile = fso.OpenTextFile(FirefoxPrefsFile, 1)

	' Get file content into an array:
	Dim aContents
	aContents = Split(ParsePrefsFile.ReadAll, vbCrLf)

	ParsePrefsFile.Close
	set ParsePrefsFile = Nothing

	' Parse Back In to Prefs.js file
	Dim aContentsNew
	aContentsNew = Filter(aContents, chr(34) & removeSetting & chr(34), False, vbTextCompare)

	' Overwrite the old file with the new file,
  	Set ParseOutPrefsFile = fso.OpenTextFile(FirefoxPrefsFile, ForWriting)
  	ParseOutPrefsFile.Write Join(aContentsNew, vbCrLf)
    ParseOutPrefsFile.Close
End Function

Function AppendPrefsToFile(writeKey, writeData)
 	set PrefsFile = fso.OpenTextFile(FirefoxPrefsFile, 8)
	PrefsFile.Write("user_pref(" & chr(34) & writeKey & chr(34) & ", " & writeData & ");" & vbNewLine)
	PrefsFile.Close
End Function

Auf diese beiden Dateien kann dann im Gruppenrichtlinienobjekt-Editor unter Benutzerkonfiguration -> Windows-Einstellungen -> Skripts -> Anmelden verwiesen werden, so dass die Skripte beim Login automatisch ausgeführt werden. (Ist die Microsoft-Welt nicht was schönes? Gruppenrichtlinienobjekt-Editor, da freut sich jeder Beamte Wink! Aufrufen mit: Start -> Ausführen -> gpedit.msc)

Anmeldeskripts

Zwar kann der Nutzer die Einstellungen ändern, aber beim nächsten Login werden diese wieder überschrieben.

Nachtrag: Wenn der Nutzer sich das erste Mal anmeldet, wird er vom Import-Dialog des Firefox begrüßt. Das kann einfach deaktiviert werden. Dazu wird eine Datei override.ini im Ordner des Firefox erzeugt (muss bei der firefox.exe liegen) mit folgendem Inhalt:

[XRE]
EnableProfileMigrator=false

Firefox-Addon-Collections


Mozilla hat ein tolles neues Feature auf ihren Addon-Seiten eingebaut: Collections. Das sind definierte Sammlungen von Addons. Da sich mit der Zeit da eine recht umfangreiche Liste anhäuft, ist es genial, diese auch an einer Stelle verwalten zu können.

Ich habe mir eine Liste erstellt unter https://addons.mozilla.org/de/firefox/collection/bheil. Es ist eine sehr umfangreiche Liste, also nicht erschrecken.

Wichtig sind vor allem die Addons, die benutzt werden können, um Daten der lokalen Firefox-Installation mit einem eigenem Server abzugleichen. Beispielsweise XMarks oder ReminderFox. (Zumindest bis Mozilla Weave irgendwann mal fertig wird.)

Das einzige, was mir noch fehlt, wäre, alle diese Addons mit einem Mausklick installieren zu können.

Sitebar - alle Lesezeichen immer und überall verfügbar


Wer an mehreren Rechnern parallel arbeitet, hat schon eh und je das Problem der Synchronisation der Lesezeichen im Browser. Natürlich gibt es die Hype-Sachen wie Social Bookmarks, oder man könnte auf Addons wie Foxmarks zurückgreifen, aber Social Bookmark-Dienste mögen für private Linksammlungen nicht der richtige Dienst sein und Foxmarks und Konsorten funktionieren natürlich nur im Firefox. Was also tun, wenn man andere Browser verwendet, vielleicht sogar an jedem Rechner einen anderen?

Sitebar ist hier die Lösung. Diese freie Software (steht unter GPL) stellt einen Server zur Verfügung, mit dem eine Online-Lesezeichen-Verwaltung aufgebaut werden kann. Dabei kann sich jeder die Software selbst herunterladen und seinen eigenen Service aufziehen. Sauber. Oder man verwendet den Dienst von den Programmierern. Oder den, den ich mir installiert habe unter

https://secure.bheil.net/bookmarks/

Wie man sieht, läuft das Ganze ausschließlich über https, d.h. jede Übertragung ist verschlüsselt. Wer Interesse hat, kann sich hier registrieren und die Installation auf diesem Server mitverwenden.

Die Integration von SiteBar in den eigenen Browser ist auf einer eigenen Seite beschrieben: Integrator-Seite. Es empfiehlt sich, das Ganze als Seitenleiste einzubinden - darauf ist auch das Format der Seite zugeschnitten.

Ein Hinweis an Opera-Nutzer (wie mich): Großteils wird SiteBar per Kontextmenü, d.h. mit der rechten Maustaste, gesteuert. Opera unterstützt das aber nicht! Es gibt zwei Methoden, sich zu behelfen: Mit Strg+Linksklick auf den Namen (nicht das Icon!) des Eintrags - oder durch Einblenden eines speziellen Icons (kann man in den Benutzereinstellungen aktivieren). Ich bevorzuge Strg+Linksklick.
Ein- und Ausblenden kann man die Seitenleiste ruck-zuck mit F4.

Hier noch ein paar Bilder, wie das dann im Browser aussieht:

Sitebar in Opera als Seitenleiste
Opera
    Sitebar in Firefox als Seitenleiste
Firefox

Typischer Browser-Nutzer


Hier eine lustige Zusammenfassung der gängisten Browser-Nutzer-Typen (klicken für volle Größe):

Typische Browser-Nutzer-Typen



Welcher Typ bist Du?

(Quelle: http://my.opera.com/chooseopera/blog/2008/10/01/typical-browser-users)

Browser durch temporären Cache beschleunigen


Unter Linux-Systemen ist es möglich, die Verzeichnisse für temporäre Dateien auf eine Art RAM-Disk auszulagern. Dafür gibt es den bequemen Weg über tmpfs. Interessant wird diese Option vor allem, wenn sehr viel RAM im System steckt, der meist brach liegt. Beispiel: In meinem PC sind 2 GB RAM, von denen i.d.R. nur 600 bis 700 MB verwendet werden, obwohl ich meist 7 oder noch mehr Programme offen habe (und 10+ Tabs in Opera).

Fügt man diese beiden Zeilen in seine /etc/fstab ein, kann man die temporären Dateien aller Programme komplett im RAM halten:

tmpfs     /tmp           tmpfs     defaults      0      0
tmpfs     /var/tmp       tmpfs     defaults      0      0

Vor allem Browser benötigen viel Cache für all die kleinen Bildchen, Skripte und sonstigen Dateien in Webseiten. Diese Cache-Verzeichnisse sind oft gefüllt mit 10.000 und mehr kleinen Dateien. Wenn diese Dateien komplett im RAM gehalten würden, dürfte das auf den meisten Systemen zu einer zum Teil drastischen Beschleunigung führen. Außerdem senkt es die Wahrscheinlichkeit einer Defragmentierung, auch wenn das unter Linux kein so großes Problem ist.

Wie ändert man die Cache-Verzeichnisse der Browser?

Nützliche Firefox-Addons


Eine alphabetische Liste nützlicher Firefox-Addons (für FF 3.0):

IE soll laut Microsoft sicherer sein als Firefox


Der "Security-Strategy Director" bei der "Microsofts Trustworthy Computing Group" (was eine tolle Bezeichnung Wink ) hat in seinem Blog herausgefunden, dass der IE von Microsoft sicherer sein soll als Firefox. Das sollte man sich mal auf der Zunge zergehen lassen.

Ein typisches Beispiel davon, wie sich manche zum Narren machen, wenn sie nur ausreichend gefüttert werden. Ob den Jungs bei MS überhaupt klar ist, was die da von sich geben?

Jedenfalls kann man sich genaueres zu dieser Sache hier durchlesen. Und wers genau wissen will, wie es um die Sicherheit dieser beiden bestellt ist, sollte mal bei Secunia nachschauen (Details zu IE 7 und Firefox 2).

Ich persönlich bevorzuge Opera (Secunia-Info zu Opera), das ist der mit Abstand sicherste (siehe dieses Widget, das Infos von Secunia grafisch darstellt). Derzeit haben wir also 7 offene Lücken im IE, 4 im Firefox, 3 im Safari und 2 im Konqueror - und keine im Opera. Das ist doch mal aussagekräftig ... Smile