Jun 10 2016

Schnell den Zeichensatz von vielen Dateien in UTF-8 konvertieren

Nach dem Server-Umzug ist mir aufgefallen, dass viele meiner Scripte unterschiedliche Zeichensätze s.g. Zeichenkodierungen aufweisen. Das war auf dem alten System kein Problem, da es großzügig darüber hinweg gesehen hat. Auf dem neuen werden Dateien etwas strikter behandelt. So wird aus einem Ä mal ganz schnell ein Ã¤ ö ü. o.ä. … Nun könnte man alle Dateien mittels Kwrite o.ä. manuell behandeln, allerdings gibt es dafür schon ein schönes Script (inkl. Fehlerbehandlung):

Lexo.ch

Einfach in ein übergeordnetes Verzeichnis kopieren und im Terminal mit “ ./converter.sh /pfad/zu/den/Dateien „aufrufen. Es behandelt den Ordner rekursiv d.h. bezieht auch alle Unterordner ein. Dabei wandelt es nur Dateien um, die dafür geeignet sind (es wird auf ein Array mit Endungen zurück gegriffen) und noch nicht in UTF-8 sind.

Nachtrag:
Ein wichtiger Hinweis an dieser Stelle: legt euch vor dem Umwandeln unbedingt eine Kopie der Daten an.
Sollte das Charset einer Datei nicht erkannt werden, wird diese auch nicht konvertiert. Diese Sicherheits-Einstellung wird für die Liste filestoconvert aufgeweicht. Es kann daher vorkommen, dass 0-Byte Dateien entstehen. Wer auf Nummer-Sicher gehen will, leert die Liste. Andernfalls sollte z.B. mittels Kompare der Zustand vorher und nachher verglichen werden. Auch praktisch ist folgende Code-Zeile, die alle 0-Byte Dateien auflistet: find $dir -size 0 -print

#!/bin/bash

# Created by LEXO, http://www.lexo.ch
# Version 1.0
#
# This bash script converts all files from within a given directory from any charset to UTF-8 recursively
# It takes track of those files that cannot be converted automatically. Usually this happens when the original charset
# cannot be recognized. In that case you should load the corresponding file into a development editor like Netbeans
# or Komodo and apply the UTF-8 charset manually.
#
# This is free software. Use and distribute but do it at your own risk. 
# We will not take any responsibilities for failures and do not provide any support.

#checking Parameters
if [ ! -n "$1" ] ; then
  echo "You did not supply any directory at the command line."
  echo "You need to provide the path to the directory that contains the files which you want to be converted"
  echo ""
  echo "Example: $0 /path/to/directory"
  echo ""
  echo "Important hint: You should not run this script from within the same directory where the files are stored"
  echo "that you want to convert right now."
        exit
fi

# This array contains file extensions that need to be checked no matter if the filetype is binary or not.
# Reason: Sometimes it happens that .htm(l), .php, .tpl files etc. have a binary charset type. This script
# does not convert binary file types into utf-8 because it might destroy your data. So we need to include these file types
# into the conversion system manually to tell the conversion that binary files with these special extensions may be converted anyway.
filestoconvert=(htm html php txt tpl asp css js)

# define colors
# default color
reset="\033[0;00m"
# Successful conversion (green)
success="\033[1;32m"
# No conversion needed (blue)
noconversion="\033[1;34m"
# file skipped because it's not mentioned in the filestoconvert array (white)
fileskipped="\033[1;37m"
# files that could not be converted aka error (red)
fileconverterror="\033[1;31m"

## function to convert all files in a directory recusrively
function convert {
#clear screen first
clear

dir=$1

# Get a recursive file list
files=(`find $dir -type f`);
fileerrors=""

#loop counter
i=0

find "$dir" -type f |while read inputfile
do
        if [ -f "$inputfile" ] ; then
                charset="$(file -bi "$inputfile"|awk -F "=" '{print $2}')"
                if [ "$charset" != "utf-8" ]; then
                        #if file extension is in filestoconvert variable the file will always be converted
                        filename=$(basename "$inputfile")
                        extension="${filename##*.}"
                        # If the current file has not an extension that is listed in the array $filestoconvert the current file is being skipped (no conversion occurs)
                        if in_array $extension "${filestoconvert[@]}" ; then
                                # create a tempfile and remember all of the current file permissions to be able to reapply those to the new converted file after conversion
                                tmp=$(mktemp)
                                owner=`ls -l "$inputfile" | awk '{ print $3 }'`
                                group=`ls -l "$inputfile" | awk '{ print $4 }'`
                                octalpermission=$( stat --format=%a "$inputfile" )
                                echo -e "$success $inputfile\t$charset\t->\tUTF-8 $reset"
                                iconv -f "$charset" -t utf8 "$inputfile" -o $tmp &>2
                                RETVAL=$?
                                if [ $RETVAL > 0 ] ; then
                                        # There was an error converting the file. Remember this and inform the user about the file not being converted at the end of the conversion process.
                                        fileerrors="$fileerrors\n$inputfile"
                                fi
                                mv "$tmp" "$inputfile"
                                #re-apply previous file permissions as well as user and group settings
                                chown $owner:$group "$inputfile"
                                chmod $octalpermission "$inputfile"
                        else
                                echo -e "$fileskipped $inputfile\t$charset\t->\tSkipped because its extension (.$extension) is not listed in the 'filestoconvert' array. $reset"
                        fi
                else
                        echo -e "$noconversion $inputfile\t$charset\t->\tNo conversion needed (file is already UTF-8) $reset"
                fi
  fi
        (( ++i ))
done
echo -e "$success Done! $reset"
echo -e ""
echo -e ""
if [ ! $fileerrors == "" ]; then
  echo -e "The following files had errors (origin charset not recognized) and need to be converted manually (e.g. by opening the file in an editor (IDE) like Komodo or Netbeans:"
  echo -e $fileconverterror$fileerrors$reset
fi
exit 0
} #end function convert()

# Check if a value exists in an array
# @param $1 mixed  Needle  
# @param $2 array  Haystack
# @return  Success (0) if value exists, Failure (1) otherwise} #end function in_array()
# Usage: in_array "$needle" "${haystack[@]}"
in_array() {
    local needle=$1
    local hay=$2
    shift
    for hay; do
#	echo "Hay: $hay , Needle: $needle"
        [[ $hay == $needle ]] && return 0
    done
    return 1
} #end function in_array

#start conversion
convert $1

 

Jun 05 2016

Umzug vollendet

Schneller als gedacht ist der Umzug von oYoX.de auf einen neuen Server vollendet.
In diesem Zusammenhang habe ich auch gleich die Verbindung zwischen Server und Browser mittels Lets-Encrypt Zertifikat abgesichert.
Ich wünsche weiterhin viel Spaß beim Lesen.

wordress_umzug

Feb 27 2016

[openSuse] Grafik Probleme mit Chrome unter Linux

chrome_opensuse_leap_graphic_issueSeit openSuse 42 treten bei mir vermehrt seltsame Phänomene zutage. So führt das Abspielen von HTML5 Videos in Chrome teilweise zu einer systemweiten Bildverzerrung. Auch wenn ich Chrome minimiere und wieder auf Vollbild schalte, treten diese Verzerrungen auf.

 

 

Video zu dem Problem:

Unter Umständen liegt es an der Hardwarebeschleunigung von Chrome. Wenn man diese deaktiviert, sollten die Probleme nicht weiter auftreten:

  1. In die Chrome Einstellungen wechseln: chrome://settings/ (in der Adressleiste eingeben)
  2. auf „Erweiterte Einstellungen anzeigen“ unten klicken.
  3. Nun bis zum Ende scrollen und dort den Haken bei „Hardwarebeschleunigung verwenden, falls verfügbar“ entfernen.

Nach einem Neustart von Chrome sollte das Problem nicht mehr auftreten.

Weitere Informationen hierzu: https://www.quora.com/How-do-I-reduce-avoid-the-heavy-CPU-usage-of-Google-Chrome-in-Ubuntu (englisch)

Feb 08 2016

[openSuse] Bildschirmfotos unter 42 Leap mittels Shortcut

screenshot_einstellung

Klick für Vollansicht

Beim Einstellen der eigenen Tastenkürzel unter „Eigene Kurzbefehle“ ist mir aufgefallen, dass man keine Bildschirmfotos mittels der „Druck“ Taste anfertigen kann. In den Vorgänger-Versionen wurde für diesen Zweck KSnapshot genutzt. Seit Leap ist das neue Programm für Bildschirmfotos Spectacle

Interessanterweise ist unter den „Eigenen Kurzbefehlen“ noch immer KSnapshot der „Druck“-Taste zugewiesen.

Das können wir jedoch einfach und schnell ändern, denn es existiert ebenfalls schon der Menü-Punkt „Screenshots“.Wir nehmen also unter der Gruppe „Voreingestellte Aktionen“ den Haken bei „Bildschirm-Drucken“ weg und klicken einmal in der Gruppe „Screenshots“ auf „Start Screenshot Tool“ im Reiter Auslöser klicken wir neben dem Wort Kurzbefehl auf den Knopf und danach einmal auf die Druck-Taste. Damit wird die Taste dem Tool zugewiesen. Fertig.

Feb 05 2016

Logitech G13 Macro-Keyboard unter Linux mit GUI

g13Vorbemerkung:

Wer das ein oder andere Spiel unter Linux spielt oder ein leistungsfähiges, aber kleines Macro-Keyboard sucht, ist mit dem G13 von Logitech sehr gut beraten. Das gute Stück gibt es 74 Euro bei Amazon oder gebraucht für ca. 30 Euro. Die Einrichtung gestaltet sich überaus einfach, da es bereits Treiber für Linux gibt. Zum Erstellen der Macros gibt es eine GUI (in Java), welche einem viel Arbeit abnimmt.

Quelle des Treibers: https://code.google.com/p/linux-g13-driver/
Alternativ: Installationspaket von oYoX:   G13 Treiber und GUI (714,1 KiB, 526 Klicks)

Installation:

1. Paket herunterladen und entpacken.

2. g++ installieren:

sudo zypper in gcc-c++   (installiert: gcc48-c++ gcc-c++ )

3. libusb-1_0-0 und libusb-1_0-devel installieren:

sudo zypper in libusb-1_0-0 libusb-1_0-devel

3 b. Alternativ über „Yast2 Software“ installiert:

libusb-1_0-0
libusb-1_0-devel

4. In den Ordner wechseln, dort die Datei „Makefile“ öffnen und folgende Zeile tauschen:

FLAGS = 
LIBS     = -lusb-1.0

# in

FLAGS = -L /lib64 
LIBS = -lusb-1.0 -l pthread

5. Mit der Konsole in den Ordner wechseln und dort „make“ eingeben
Damit wurde der Treiber erstellt.

6. Nun kann die GUI gestartet werden:

g13_gui

java -jar Linux-G13-GUI2.jar

7. Jetzt wird es etwas tricky, denn die GUI schreibt die Konfiguration in den Home-Ordner des jeweiligen Benutzers, da sie nicht mit root gestartet wird/wurde.
Der G13 Treiber muss jedoch mit root gestartet werden und sucht demnach auch im root-Ordner nach der Konfiguration.

Linux bietet uns hier nun eine wunderbare Lösung: Symbolische Verknüfungen.
Wir legen also im Root-Verzeichnis eine Verknüpfung auf den Konfigurations-Ordner des aktuellen Users an:

sudo ln -s /home/USERNAME/.g13 /root/.g13
# (USERNAME bitte gegen den aktuell angemeldeten Benutzername austauschen)

8. Nachdem das GUI-Fenster wieder geschlossen ist und der symbolische Link erzeugt wurde, kann der Treiber gestartet werden:

sudo ./Linux-G13-Driver

9. Ab jetzt ist es möglich, die GUI auch bei laufendem Treiber zu starten und Tasten anzupassen.

Die Änderungen werden sofort übernommen, allerdings muss nach den Änderungen / Anpassungen der Tasten und Makros das Profil auf der G13 neu geladen werden. Dazu einfach eine andere Profil-Taste (4 Tasten direkt unter dem Display) drücken und dann zum aktuellen Profil zurück kehren. Damit lädt sich die G13 alle Konfigurationen.

Anmerkung zum oYoX Paket

Ich habe die GUI etwas angepasst (Hintergrundbild), sodass die Tastenbelegung besser zu lesen ist. Auch sind zwei Starter (Bash-Scripte) im Paket, welche noch an den jeweiligen User-Pfad angepasst werden müssen.

Downloads

  G13 Treiber und GUI (714,1 KiB, 526 Klicks)

Jan 28 2016

[openSuse] Nvidia macht unter openSUSE Leap 42.1 Probleme

plasmacrashWer nach einem Update von openSUSE vor einem schwarzen Desktop steht und evtl. mit Fehlern wie „Plasma crashed“ konfrontiert wird, muss nicht verzagen. Das Problem liegt im NVIDIA Treiber und lässt sich sehr leicht lösen, indem man selbigen neu installiert.

Update vom 04.02.2016:
Mit dem Tool DKMS entfällt die ständige Neu-Installation. Dazu einfach vor der (erneuten) Installation DKMS installieren:

sudo zypper in dkms

Danach wird an „NVIDIA-Linux-x86_64-352.63.run“ einfach noch das Kommando -dkms angehängt. Von nun an wird nach einem Kernel-Update der Treiber automatisch neu gebaut.

Einfach dieser Anleitung folgen:

# Mittels ALT + F5 in die Konsole wechseln und in den Ordner mit der 
# ./NVIDIA-Linux-x86_64-352.63.run wechseln

su
cd /home/USERNAME/Downloads/
sh ./NVIDIA-Linux-x86_64-352.63.run -uninstall

# Der Anleitung folgen... bei der Frage nach dem Backup das Backup 
# einspielen (wiederherstellen) lassen.

# Nun ist wieder der Standard-Treiber eingebunden und ein Start zum 
# Desktop sollte möglich sein.
# Also einen Neustart durchführen lassen...
 
reboot -h now

# Nach dem (hoffentlich erfolgreichen Neustart) wieder vom Desktop 
# abmelden (nicht herunterfahren) und mittels ALT + F5 erneut in die 
# Konsole wechseln.

# Jetzt den Treiber erneut installieren:

su
cd /home/USERNAME/Downloads/
sh ./NVIDIA-Linux-x86_64-352.63.run
# ANMERKUNG: evtl. mit -dkms (siehe oben). Dann lautet die Zeile:
# sh ./NVIDIA-Linux-x86_64-352.63.run -dkms

# Den Anweisungen folgen und ein Backup anlegen lassen 
# (geschieht automatisch). Außerdem die 32bit Libs installieren lassen.

# Der NVIDIA Treiber ist nun wieder eingebunden. Jetzt sollte alles 
# wieder funktionieren. 
# Also noch einen Neustart durchführen lassen...
 
reboot -h now

Vielleicht gibt es ja in den unendlichen Weiten des Internets ein Script, was nach einem (Kernel-)Update das ganze etwas vereinfacht…

Jan 24 2016

Frühjahrsputz – oYoX im neuen Design

Nachdem oYoX immer unübersichtlicher wurde und zahlreiche WordPress-Plugins dafür gesorgt hatten, dass alles irgendwie überladen war, habe ich mich zu einer großen Putzaktion durchgerungen.

besen_putzen.jpg
Zuerst sollte ein neues, frisches Layout her: modern und mit übersichtlicheren Kategorie, damit man Einträge schneller findet.
Das neue Layout ist nun breiter und passt sich dynamisch an die Bildschirmgröße an. Auch ist es über Smartphones nun ohne das WordPress Plugin nutzbar, was zu einem einheitlicheren Design führt. Vor allem aber zeigt es die Informationen kompakter / übersichtlicher.
So weit so gut. Jetzt steht aber für die kommenden Tage noch einiges an Arbeit an: Alle Einträge müssen an das Layout angepasst bzw. vereinheitlicht werden. Ungültige Beiträge müssen aussortiert und auch das Download-System auf Vordermann gebracht werden.
Sollte es in den kommenden Tagen daher noch zu dem ein oder anderen „Schluckauf“ kommen, dann bitte ich um etwas Geduld.
Bild:   besen_putzen.jpg (30,3 KiB, 398 Klicks) …

Jun 17 2015

Kurzer Tipp: Screencast mit SimpleScreenRecorder

screenshot

Nachdem ich nach einer einfachen und dennoch starken Lösung für die Aufnahme des Bildschirms gesucht habe, bin ich (neben dem mir schon bekannten RecordMyDesktop) auch auf SimpeScreenRecorder gestoßen. Dieses Tool bietet in einem einfach Interface sehr viele Optionen (u.a. kann man ein Fenster festlegen und dieses der Maus folgen lassen). Alles in allem sehr gefälliges Programm:

Installation über die Packman Paketquelle

sudo zypper install simplescreenrecorder

oder über die Packman 1-Klick Lösung:

http://packman.links2linux.org/package/simplescreenrecorder

Mehr dazu auf der Entwickler Webseite:

http://www.maartenbaert.be/simplescreenrecorder/

Mai 30 2015

Automatisch entfernten Rechner im Lan mit WOL starten (Script)

Wer einen Rechner oder ein NAS ( Netzwerkspeicher ) automatisch beim Start von Linux hochfahren / booten möchte, kann dies mittels eines einfachen Scripts bewerkstelligen:

#!/bin/bash

target_mac="MA:CA:DR:ES:SE"
target_ip="192.168.1.1"

count="0"
while [ $count -lt 3 ]
 do
 ping -nqc 3 -w 5 $target_ip > /dev/null && break
 sleep 3
 wol $target_mac
 sleep 120
 ping -nqc 3 -w 5 $target_ip > /dev/null && break
 count=$[$count+1]
done

Dieses Script prüft mittels Ping, ob die Ziel-IP (target_ip) schon erreichbar ist. Sollte dem so sein, wird das Script beendet.
Findet es die IP Adresse nicht, dann wird ein Wake on Lan Befehl ausgesendet und 120 Sekunden gewartet (bis das Gerät fertig gebootet hat)
Nun erfolgt nochmals ein Ping an das Ziel. Wird das Ziel gefunden, ist alles in Ordnung und das Script wird beendet. Ansonsten wird von vorne begonnen.

nas_serverWir speichern das Script als „wol_autostart.sh“ und machen es ausführbar.
Danach kopieren wir es in den Ordner /bin/ damit später der Befehl „wol_autostart.sh“ zum Starten reicht.

Als letztes starten wir die Autostart Verwaltung von KDE (einfach das Wort in der SuseMenü-Suche eingeben) und klicken auf Programm hinzufügen. Hier lediglich „wol_autostart.sh“ eingeben und fertig.

Quelle: https://calomel.org/wakeonlan.html

Mai 03 2015

Canon MP550 über ASUS RT-N18U / N66U Router

Nur ein kurzer Tipp. Die Einrichtung eines Druckers (in diesem Fall o.g. Canon) kann sich etwas schwerer gestalten, wenn man die Route erst testen möchte und nur ein Fehler zurück gegeben wird. Tatsächlich druckt der Drucker allerdings ganz wunderbar – man muss schlicht die Route angeben und ins „Blaue“ hinein drucken:

Drucker_Server1

Drucker_Server2

Drucker_Server3

Drucker_Server4

Drucker_Server5

Ältere Beiträge «