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

Windows 7: Automatischen Neustart nach Einspielen von Updates verhindern


Windows will nach dem Einspielen von Sicherheitsupdates sehr oft neu gestartet werden, was auch wichtig ist, da sonst die Updates nicht greifen. Bei PCs, die jedoch sowieso täglich manuell neu gestartet werden (Arbeitsrechner etc.), kann dieses Verhalten schon nerven. Mit einem Registry-Eintrag kann das ausgeschaltet werden:

  • * Registrierungseditor öffnen (Win- bzw. Super-Taste + R -> "regedit")
  • * Zu HKEY_LOCAL_MACHINE\SOFTWARE\Polices\Microsoft\Windows navigieren
  • * Einen neuen Schlüssel anlegen mit dem Namen WindowsUpdate
  • * Darin ein 32bit-DWORD anlegen mit dem Namen NoAutoRebootWithLoggedOnUsers und diesen Wert auf 1 setzen

Informationen zur Windows-Aktivierung


Mit dem Tool slmgr.vbs kann die Windows-Aktivierung von Vista und 7 angesprochen werden. Interessant sind hierbei vor allem folgende Parameter:

slmgr.vbs /dlv  Detailierte Informationen anzeigen
slmgr.vbs /xpr  Ablaufdatum der Aktivierung
slmgr.vbs /ato  Aktivierungsprozess manuell anstoßen
slmgr.vbs /rearm  Frist zum Aktivieren verlängern (geht 3x zu je 30 Tagen)
slmgr.vbs /?  Alle Optionen anzeigen

Windows 7: Klassische Taskleiste wiederherstellen


Windows 7 führt eine neue Taskleiste ein. So schön diese anzusehen ist: In einigen Anwendungsfällen ist die alte, von Windows XP gewohnte, besser. Leider hat Microsoft keine Möglichkeit vorgesehen, das alte Verhalten wieder einzuschalten. Aber mit etwas Eigeninitiative kann das alte Verhalten fast komplett wiederhergestellt werden. Am Ende sieht das dann so aus:

Win7 mit klassischer Taskleiste


Windows 7 Beta zum Ausprobieren


Heute hat Microsoft die Beta-Version vom Vista-Nachfolger Windows 7 für alle zum Download angeboten (siehe auch in Microsofts Technet-Blog). Leider sind die Server von Microsoft dem Ansturm nicht gewachsen und es erscheinen tolle Meldungen wie "Server is too busy...". Das dürfte daran liegen, dass es nur 2,5 Millionen Downloads (bzw. Keys) geben wird, und somit alle Interessierten nun natürlich die ersten sein wollen. Diese Vorstellung ging wohl etwas in die Hose.

Im Gegensatz zu dieser Demonstration eines gelungen, selbst verschuldeten DDOS sieht Windows 7 allerdings schon recht annehmlich aus. Ich habe es in VirtualBox ausprobiert (aber nur einigen Minuten bisher, also kein ausführlicher Test) und es geht wirklich richtig fix. Die neue Taskleiste ist zwar gewöhnungsbedürftig, aber nicht schlecht. Ob sie wirklich besser ist, wird nur ein längerer Test ans Licht bringen. Toll finde ich vor allem die Tools zur Systemüberwachung, die zwar tief versteckt sind, aber richtig schönen Einblick gewähren.

Wer nicht so lange warten will, bis die MS-Server wieder gehen, hier sind Direkt-Links zu der englischen Version (ich habe aber keine Ahnung, wie lang diese gültig sein werden):

32-Bit 64-Bit

Zwar fehlt dann immer noch der Beta-Key, aber angeblich soll auch die Freischaltung für einen weiteren Testraum wie damals bei Vista funktionieren (siehe Heise-Artikel). Da die Beta sowieso am 01. August den Dienst einstellt, dürfte das für Tests locker reichen.

Vielleicht wird Windows 7 wirklich der Nachfolger von XP. Was ich da bisher gesehen habe, lässt zumindest hoffen ...

Automatischer Download von Dateien über SCP unter Windows (mittels WinSCP)


Gerade erst hatte ich beschrieben, wie ein Download per FTP unter Windows automatisierbar ist, zum Beispiel für Backup-Zwecke. Aber so ganz glücklich bin ich mit dieser Methode nicht: Ein Backup von wichtigen Dateien über ein unsicheres Protokoll wie FTP ist nicht gerade das, was ruhig schlafen lässt. Zwar könnte FTPS oder FTPES zum Einsatz kommen, aber das wird nicht vom Standard-FTP-Kommandozeilen-Client von Windows unterstützt. Entsprechende Drittprogramme waren entweder nicht frei oder nicht für die Kommandozeile geeignet.

Aber wenn ein Zugang per SSH zum Server besteht, kann der Download auch über SCP erfolgen und somit verschlüsselt ablaufen. Dafür bietet sich der Einsatz von WinSCP an, einem freien Open-Source-SFTP-Client für Windows.

Um das ganze zu automatisieren, legen wir wieder eine Batch-Datei an, die den Download startet. Folgende Batch-Datei startet WinSCP mit den richtigen Parametern:

@echo off
C:
cd \Programme\WinSCP
winscp.exe /console /script=E:\Backups\Server\SCP_ANWEISUNGEN.txt /log=E:\Backups\Server\SCP_BACKUP.log

Auch hier werden die eigentlichen Anweisungen für WinSCP in eine extra Datei gespeichert. In obigem Beispiel ist das die Datei E:\Backups\Server\SCP_ANWEISUNGEN.txt. Diese enthält folgendes:

option batch on
option confirm off
open USER:_PASSWORD_@HOST
cd REMOTE_DIR
option transfer binary
get * LOCAL_DIR\*
close
exit

Hier müssen die Werte in Großbuchstaben angepasst werden, also USER, PASSWORD, HOST, REMOTE_DIR und LOCAL_DIR. Damit werden alle Dateien in REMOTE_DIR in das Verzeichnis LOCAL_DIR heruntergeladen.

Das Kommunikations-Log wird dabei von WinSCP in die Datei E:\Backups\Server\SCP_BACKUP.log gespeichert. Kommt es zu Fehlern, kommt man diesem meist recht schnell durch das Log auf die Schliche.

Automatisches FTP-Backup unter Windows


Hinweis: Diese Methode ist unverschlüsselt und sollte daher nicht für wichtige Dateien verwendet werden! Wenn Zugriff per SSH besteht, ist diese Methode über SCP vorzuziehen!

Folgende Batch-Datei ist ein Äquivalent zu diesem Shell-Skript. Es lädt alle Dateien von einem FTP-Server herunter. Damit kann zum Beispiel ein automatisches Backup eingerichtet werden.

Unter Windows (XP in diesem Fall) erzeugt man dazu eine Batch-Datei mit folgendem Inhalt (z.B. ftp_backup.bat):

@echo off
E:
cd \Backups\Server
ftp -i -s:E:\Backups\FTP_ANWEISUNGEN.txt

Dies wechselt in das Verzeichnis, in dem später die heruntergeladenen Dateien landen sollen (hier E:\Backups\Server). Für den Download wird das interne FTP-Progrämmchen von Microsoft verwendet. Was das FTP-Programm tun soll, muss in einer zweiten Datei notiert und per Option übergeben werden. In obigem Beispiel ist das die Datei E:\Backups\FTP_ANWEISUNGEN.txt.
Diese hat für einen Download aller Dateien folgenden Inhalt:

open FTPHOST
USERNAME
PASSWORD
binary
mget *
quit

Natürlich müssen hier noch die entsprechenden Werte für FTPHOST, USERNAME und PASSWORD eingetragen werden. Das ganze schaltet dann in den binären Übertragungsmodus und lädt jede Datei in das aktuelle Verzeichnis herunter. Dabei werden schon bestehende, lokale Dateien überschrieben.

Das kann man dann in der Systemsteuerung noch über einen automatischen Task zeitgesteuert starten lassen oder einfach eine Verknüpfung in den Autostart-Ordner legen, wenn der Rechner jeden Tag neu gestartet wird.

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?

Warum braucht Linux keine Defragmentierung?


Dies ist eine freie Übersetzung des Original-Artikels von Dominic Humphries ins Deutsche:



... das ist die Frage, die regelmäßig in Linux Foren auftaucht, wenn neue Nutzer auf ihrem tollen, neuen Desktop das Defrag-Werkzeug nicht finden. Dies ist mein Versuch, eine einfache, nicht-technische Antwort auf die Frage zu geben, warum einige Dateisysteme mehr unter Fragmentierung leiden als andere.

Was tun, wenn keine Verbindung zwischen Windows-Client und NX-Server möglich ist


Beruflich (genauso wie privat auch) setze ich Ubuntu (und Debian) auf Servern ein. Auf der Arbeit bin ich allerdings gezwungen, mit Windows XP als Desktop zu arbeiten. Für die graphische Verbindung zum Server setze ich die NX Free Edition von NoMachine ein.

Heute kamen Updates für Ubuntu raus, die eine Schwachstelle im Zufallsgenerator von OpenSSH beheben. Damit diese Behebung aber auch vollständig greift, müssen alle Keys des SSH-Servers neu generiert werden. Die Folge ist, dass man bei Verbindungen per SSH Warnungen bekommt, da sich der Key des Servers geändert hat. Dies ist soweit auch kein Problem (man wird auf diesen Umstand während der Installation der Patches aufmerksam gemacht), aber wer NX zur Fernsteuerung seiner Rechner verwendet, wird sich plötzlich nicht mehr einloggen können.

Die Lösung ist allerdings recht einfach: Löschen Sie die Datei known_hosts unter C:\Dokumente und Einstellungen\USER\.ssh in Windows und schon sollte der Login wieder klappen.

Ich weiß nicht, inwiefern dies auf alle Installationen dieser Art zutrifft, aber bei mir hat dies sofort geholfen.
Vorherige Einträge  Vorherige Einträge