Sunday, November 4, 2018

LibreOffice: Inhalts- und Stichwortverzeichnis automatisch aktualisieren

Die Verzeichnisse wie Inhalts- oder Stichwortverzeichnis in einem LibreOffice Writer Dokument, können beim Speichern oder Exportieren automatisch aktualisiert werden. Dazu verknüpft man folgendes Makro an die Ereignisse Dokument speichern und Dokumentkopie speichern oder exportieren.

Den Dialog dazu findet man unter Extras/Makros/Bearbeiten und für das Zuweisen unter Extras/Makros/Verwalten/LibreOffice Basic/Zuweisen.

loMakroDocumentIndexesUpdate1.png

loMakroDocumentIndexesUpdate2.png

Das Makro

REM  *****  BASIC  *****

Sub Main

End Sub	

REM Verzeichnisse aktualisieren
REM Siehe auch: https://www.oooforum.de/viewtopic.php?f=18&t=70890
REM             https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=2557
Sub DocumentUpdateIndexes
	On Error Goto ErrorHandler ' Enables error handling

	oIndexes = ThisComponent.getDocumentIndexes()
	for i = 0 to oIndexes.getCount () - 1
		oIndexes (i).update
	next

	' Label
	ErrorHandler:
End Sub

Sub DokumentSpeichern
	DocumentUpdateIndexes
End Sub

Sub DokumentkopieSpeichernOderExportieren
	DocumentUpdateIndexes
End Sub

Monday, April 2, 2018

X Window System für Windows, um grafische Anwendungen unter Gygwin oder Windows-Subsystem für Linux (WSL) auszuführen

Mit dem Windows-Subsystem für Linux (WSL) können Linux-Distributionen wie bspw. Debian GNU/Linux direkt unter Windows ausgeführt werden – einschließlich aller Anwendungen.

Um grafische Anwendungen (GUI) unter WSL (oder auch Gygwin) ausführen zu können, muss unter Windows ein X Window System/X-Server installiert sein.

Es bietet sich hier an, den X-Server von Gygwin/X XWin.exe zu installieren, da Gygwin auch viele andere Pakete wie Perl, SSH, usw. bereitstellt und es ggf. schon installiert ist. Auf die Installation von Gygwin selbst geht dieser Artikel aber nicht weiter ein. Wie man Gygwin unter Windows installiert, aktualisiert usw. ist auf der Webseite des Projekts beschrieben. Siehe: https://cygwin.com und https://x.cygwin.com/. Kurz: Es wird das Programm setup-x86_64.exe ausgeführt und im Dialog ein Mirror ausgewählt, die Paketliste geladen/aktualisiert und die Pakete zur Installation/Aktualisierung ausgewählt.

Ist kein X-Server installiert, wird dies i.d.R. durch folgende Fehlermeldung ausgedrückt:

$ DISPLAY=":0" thunderbird # Start einer grafischen Anwendung (hier thunderbird)
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0

X-Server installieren

Der X-Server XWin.exe wird über das Cygwin-Paket xorg-server installiert:

wsl-x-server.png

Damit XWin.exe beim Windows Systemstart startet, muss es in den Autostart z.B. unter %APPDATA%\Microsoft\Windows\Start Menu\Programs\startup:

wsl-x-server-autostart.png

Wichtig für eine Verknüpfung im Autostart ist als Ziel: C:\cygwin64\bin\XWin.exe :0 -multiwindow -listen tcp -auth und Ausführen in: C:\cygwin64\home\%USERNAME% anzugeben.

Außerdem muss in der Windows Firewall XWin.exe konfiguriert/eingetragen sein, da es ein Netzwerkprotokoll ist! Der Zugriff muss aber nicht erlaubt werden und der Dialog kann mit abbrechen beendet werden.

Nun können auch grafische Anwendungen aus WSL (und auch aus Gygwin) heraus gestartet werden.

Die Anwendungsdaten befinden sich in folgenden Ordnern:

  • WSL:
    /mnt/c/Users/,
    /mnt/c/Cygwin/home/, /mnt/c/Cygwin64/home/,
    %LOCALAPPDATA%\Packages\*\LocalState\rootfs\home\
  • Cygwin:
    /cygdrive/c/Users/,
    C:\Cygwin\home\, C:\Cygwin64\home\,
    /cygdrive/c/Users/*/AppData/Local/Packages/*/LocalState/rootfs/home/

Cygwin aktualisieren

Um Cygwin bzw. die installierten Pakete zu aktualisieren, habe ich ein kleines PowerShell-Skript geschrieben:

# Download Cygwin
Invoke-WebRequest -uri "https://cygwin.com/setup-x86_64.exe" -OutFile "setup-x86_64.exe"

# Run Cygwin in unattended setup mode
# setup-x86_64.exe --help
Start-Process -FilePath "setup-x86_64.exe" -ArgumentList "--verbose","-q","--upgrade-also"

Weblinks

Sunday, July 23, 2017

Debian 9 (Stretch): Predictable Network Interface Names – Umstellung auf das neue Verfahren zur Namensvergabe von Netzwerkschnittstellen

Spätestens ab Debian 10 (Buster) wird das alte Verfahren zur Namensvergabe von Netzwerkschnittstellen nicht mehr unterstützt, und das System muss auf das neue Verfahren umgestellt sein (Predictable Network Interface Names).

Bei einer Neuinstallation von Debian 9 (Stretch) passiert diese Umstellung automatisch. Bei einem Upgrade von Debian 8 (Jessie) muss hingegen manuell umgestellt werden.

Auf das neue Verfahren zur Namensvergabe von Netzwerkschnittstellen umstellen

Um auf das Verfahren Predictable Network Interface Names umzustellen, muss die Datei /etc/udev/rules.d/70-persistent-net.rules gelöscht werden:

mv /etc/udev/rules.d/70-persistent-net.rules{,.old}

Danach muss das System neu gestartet werden.

Dieser Schritt stellt eine entsprechend weitreichende Änderung am System da. Eventuelle Konfigurationsdateien müssen angepasst und getestet werden. Wer statt des Network-Manager die Datei interfaces(5) nutzt, muss zumindest diese anpassen.

Siehe auch: https://www.debian.org/releases/stable/amd64/release-notes/ch-whats-new.de.html#new-interface-names, https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L3 (Beschreibt nach welchen Regeln, die neuen voraussagbaren/vorhersagbaren Namen aufgebaut sind), https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/, file:///usr/share/doc/udev/README.Debian.gz

Benutzerdefinierte Namen für Netzwerkschnittstellen

In manchen Fällen ist es praktisch, eigene Namen für Netzwerkschnittstellen zu definieren.

Dies kann mittels zwei verschiedener Methoden erreicht werden. Einmal mittels Network Device Configuration: systemd.link(5) und einmal mittels Dynamic Device Management: udev(7), welche wesentlich mehr Möglichkeiten bietet.

In folgenden Beispielen, wird der Netzwerkschnittstelle mit der MAC-Adresse 00:a0:de:63:7a:e6, der feste Namen dmz zugewiesen:

  • Dynamic Device Management – udev(7):
    Beispielsweise kann /etc/udev/rules.d/76-netnames.rules erstellt und dort Netzwerkgeräte anhand beliebiger Attribute und Eigenschaften identifiziert und benannt werden.
    Hier ein Beispiel, um ein Gerät über die MAC-Adresse zu identifizieren und zu benennen:

    cat /etc/udev/rules.d/76-netnames.rules
    # identify device by MAC address
    SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:a0:de:63:7a:e6", NAME="dmz"
    

    Gegenüber systemd.link(5), bietet diese Methode auch die Möglichkeit Geräte anhand anderer Übereinstimmungsschlüssel, wie der Vendor/Model-ID oder des Gerätepfads zu Identifizieren. Siehe dazu auch die Handbuchseite udev(7), für die Dokumentation, wie man udev-Regeln schreibt.

  • Network Device Configuration – systemd.link(5):
    Alternativ geht auch eine Konfiguration ohne udev(7), mittels systemd.link(5) und des Name-Schlüssels:

    cat /etc/systemd/network/10-dmz.link
    [Match]
    MACAddress=00:a0:de:63:7a:e6
    [Link]
    Name=dmz
    

Damit diese Änderungen übernommen werden, ist ggf. eine Aktualisierung der initrd-Datei mittels update-initramfs -u und ein Neustart des Systems erforderlich.

Friday, May 26, 2017

DNS mit bind9 und openresolv

Da hier (o2/Berlin) in letzter Zeit andauernd Verbindungsbrüche und Probleme mit dem DNS auftreten, habe ich lokal den Internet Domain Name Server bind9 und das Paket openresolv installiert:

bind9

apt-get install bind9 bind9-doc bind9utils
cat <<! >/etc/bind/named.conf.options 
options {
	directory "/var/cache/bind";

	// If there is a firewall between you and nameservers you want
	// to talk to, you may need to fix the firewall to allow multiple
	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

	// If your ISP provided one or more IP addresses for stable 
	// nameservers, you probably want to use them as forwarders.  
	// Uncomment the following block, and insert the addresses replacing 
	// the all-0's placeholder.

	forwarders {
		#1.1.1.1;                       # the Internet's Fastest, Privacy-First DNS Resolver
		#8.8.4.4; 8.8.8.8;              # Google Public DNS
		#9.9.9.9;                       # Quad9
		#208.67.222.222; 208.67.220.220 # OpenDNS
	};

	# Sind keine forwarders angegeben, werden die Root-Nameserver abgefragt

	forward first; # first|only

	//========================================================================
	// If BIND logs error messages about the root key being expired,
	// you will need to update your keys.  See https://www.isc.org/bind-keys
	//========================================================================

	dnssec-enable yes;
	dnssec-validation yes; # yes|no|auto;

	auth-nxdomain no;      # conform to RFC1035

	listen-on    port 53 { 127.0.0.1; };
	listen-on-v6 port 53 { ::1; };

	allow-query { 127.0.0.0/8; ::1/128; };
};
!
service bind9 reload

Die Werte für listen-on, listen-on-v6 und allow-query können auch auf { any; } gesetzt werden, was dann alle erlaubt.

openresolv

apt-get install openresolv
cat <<! >>/etc/resolvconf.conf 
name_servers="127.0.0.1 ::1"
!
resolvconf -u
cat /etc/resolv.conf 
# Generated by resolvconf
domain localdomain
nameserver 127.0.0.1
nameserver ::1

Die Option name_servers setzt die Nameserver, die verwendet werden sollen (Stattdessen kann auch die Option name_servers_append verwendet werden. Dann werden die Nameserver, zur dynamisch von openresolv generierten Liste hinzugefügt).

Nach dem ändern der Konfigurationsdatei muss resolvconf -u ausgeführt, oder das System neu-gestartet werden, damit die Änderungen in die Datei resolv.conf geschrieben werden.

Stehen mehr als 3 Nameserver in der /etc/resolv.conf, sei noch angemerkt, dass ab dem 4ten, die nameserver-Einträge ignoriert werden. Siehe die Option nameserver in resolv.conf(5).

Optionen für den Resolver setzen

Mit der Option resolv_conf_options, können interne Variablen des Resolvers beeinflusst werden. In den Kommentaren wurde folgender Wert vorgeschlagen (Diese machen vor allem dann Sinn, wenn mehrere nameserver-Einträge konfiguriert wurden - das bind9 Setup ist etwas neuer als dieser Kommentar):

resolv_conf_options="ndots:1 timeout:0.3 attempts:1 rotate"

Was diese Optionen bewirken, steht in der Handbuchseite resolv.conf(5).

Alternative DNS-Anbieter

In den Kommentaren wurden auch alternative DNS-Anbieter angesprochen.

Die bekanntesten sind u.a. OpenNIC, Cesidian Root oder Open Root Server Network. Alle stellen eine Alternative zu den von der ICANN koordinierten Root-Nameservern bereit und zensieren nach eigener Aussage nicht.
Siehe auch: https://de.wikipedia.org/wiki/Domain_Name_System

Friday, June 10, 2016

Debian; GNOME 3: Neue Datei über das Kontextmenü anlegen

Von GNOME 2 kennt man den Punkt neue Datei anlegen, im Kontextmenü des Dateimanager Nautilus. Dieser fehlt in GNOME 3.

Um eine neue Datei (leere Textdatei) über das Kontextmenü im Dateimanager Nautilus anlegen zu können, wird eine entsprechende Vorlage unter ~/Vorlagen/ benötigt.

Eine Vorlage für einfache Textdateien erstellen

$ mkdir ~/Vorlagen
$ touch  ~/Vorlagen/Textdatei

Jetzt können via rechtem Mausklick im Dateimanager Nautilus, über das Kontextmenü, neue Textdateien angelegt werden.

Siehe auch: Vorlagen für häufig genutzte Dokumenttypen.