Per RDP auf Ubuntu >=12.10 zugreifen mit xrdp und gnome-session-fallback

Da ich häufig an verschiedenen Maschinen arbeite und diese auf Grund meiner Arbeit fast immer mit Windows laufen, habe ich mich gegen VNC und halb-fertige (und vor allem verbuggte) Lösungen wie Splashtop oder Teamviewer entschieden. WIN+R, „mstsc“, „Enter“ geht eben doch schneller als erst einmal Fremdsoftware zu installieren. Mit „xrdp“ und „gnome-session-fallback“ ist das möglich.

Aber Vorsicht! Auf die 3D-Oberfläche Unity muss verzichtet werden.

Als Ausweichlösung verwende ich gnome-session-fallback, sozusagen die 2D-Alternative für den Ubuntu Desktop. Damit auch das Menü korrekt angezeigt wird, kommen noch ein paar Indikatoren dazu:

sudo apt-get install xrdp gnome-session-fallback indicator-applet-complete indicator-applet-session indicator-applet-appmenu

Beim Verbinden mit einem RDP-Client, liest xrdp die Datei „~/.xsession“. Über diese kann also die zu verwendende Session definiert werden:

echo "gnome-session --session=gnome-fallback" > ~/.xsession

Am besten noch einmal den Dienst neustarten:

sudo /etc/init.d/xrdp restart

Nun sollte die Verbindung zum Ubuntu Desktop so funktionieren, wie sie es auch zu einem Windows Client täte.

minidlna: Einrichtung unter Ubuntu

minidlna stellt einen DLNA-Server zur Verfügung. Jeder Linux-Rechner wird damit zum Medienserver (Bilder, Videos, Hörbücher, etc.) für alle digitalen Geräte, die DLNA unterstützen und an das Heimnetz angeschlossen sind. DLNA/UPnP-Geräte erkennen den Medienserver automatisch. Die Inhalte des Medienservers werden auf den Geräten angezeigt und sind von dort als Stream abrufbar.

…schreibt http://wiki.ubuntuusers.de/MiniDLNA

Getestet habe ich es unter Ubuntu 12.04, 13.04 und 13.10. Ich denke nicht, dass sich sonderlich viel in zukünftigen Versionen ändern wird.

Die Einrichtung läuft wie folgt ab; zuerst die Installation:

sudo apt-get install minidlna

Nun die Konfiguration als root öffnen, dazu sudo und einen Editor verwenden:

sudo gedit /etc/minidlna.conf

Folgende Punkte sind zu ändern:

media_dir=V,/path/to/media
db_dir=/var/lib/minidlna
log_dir=/var/log
log_level=warn
friendly_name=MiniDLNA
inotify=yes

media_dir: Das vorangestellte „V“ steht für Video. Möglich sind außerdem A (Audio), P (Pictures) oder nichts (media_dir=/path).
db_- und log_dir empfehle ich zu setzen, um bei Fehlern einfacher debuggen zu können.
Das log_level „warn“ ist recht ruhig, trotzdem noch hilfreich.
inotify dient zum automatischen scannen von Änderungen. Durch inotify werden neue Dateien quasi sofort erkannt.
friendly_name ist lediglich der Anzeigenarme des Servers im Netzwerk. Kann beliebig verändert werden.
Achtung! Ohne Erweiterung der „max_user_watches“ für inotify, könnte eine große Bibliothek in minidlna schnell Probleme machen, daher wird diese via /etc/sysctl.conf erhöht:

gksudo gedit /etc/sysctl.conf

An das Ende einzufügen:

fs.inotify.max_user_watches=1048576

Die Datei speichern, schließen und die Änderungen wirksam machen:

sudo sysctl -p

Abschließend den minidlna Dienst reloaden:

sudo /etc/init.d/minidlna force-reload

Die aktuelle Datenbank mit indizierten Dateien, kann ganz einfach im Browser aufgerufen werden:

„ls“: Dateien mit numerischer Berechtigung anzeigen

Ein kurzer Snippet für ein Bash-Alias, das die Dateiberechtigung auch numerisch anzeigt.

Wer es global (alle Benutzer) verwenden will, schreibt es in die Datei „/etc/bash.bashrc„.
Für einen einzelnen Benutzer, kommt die Zeile in die „~/.bashrc
 
 
 
 

alias lmod="ls -la | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\"%0o \",k);print}'"

Aufgerufen wird der Befehl (/Alias) entsprechend mit "lmod".

Ich habe es als "Linux Allgemein" getaggt, da es alle Distributionen mit Bash betrifft. Wirklich alte Bash-Versionen, !könnten! allerdings Probleme damit haben.

Natürlich kann man auch "alias ls" verwenden.

MPC-HC: Audio zu leise auf Stereo Systemen (Downmix zu Stereo)

Als kleiner Tipp für diejenigen, die wie ich gerne mal einen Film mit dem MPC-HC auf dem Computer schauen wollen und kein 5.1 System- oder gar nur Monitor-Lautsprecher besitzen:

In den Optionen („O“) findet sich unter „Interne Filter“ die Einstellung für den Audio-Decoder. Hier kann im Reiter „Mixing“ die „Output Speaker Configuration“ „Stereo“ gesetzt werden. Der Ton ist anschließend wesentlich lauter.

MPC-HC: Downmix zu Stereo in den Optionen.

Copy.com Client ohne GUI als Dienst auf Debian Wheezy (x86 und x86_64) installieren – Install-Script v1.1

Copy.com

Changelog

  • 12. Mär 2014 – Init-Script: Fix für „status“

Copy.com ist wie Dropbox ein Dienst, um Daten in der Cloud abzuspeichern. Im Gegensatz zu Dropbox bekommt man hier ganze 15GB kostenlosen Speicher.

5GB Extra-Speicher gibt es mit Einladung/Ref.-Link, meiner lautet: https://copy.com?r=ul6OfL

Um die Installation zu erleichtern, habe ich ein Install-Script in Bash geschrieben, um den Client herunterzuladen, in /opt/copycom_agent zu installieren und einem unpriviligierten Benutzer zuzuweisen. Die Architektur des Systems wird automatisch erkannt.

Das Script installiert zudem ein INIT-Script, um den Client beim hochfahren mitzustarten.
Das Passwort wird NICHT plain-text gespeichert. Es wird eine Initialisierung durchgeführt, die das Passwort verschlüsselt im Anwendungsverzeichnis speichert. Im INIT-Script wird diese Angabe daher nicht mehr benötigt.

Abhängigkeiten
– Copy.com Accunt
– Curl
– Bash

Usage
chmod +x installer.sh
./installer.sh COPY_LOGIN COPY_PASSWD RUNAS

Nach der Installation kann der Service via „service copycom start/stop/restart“ gesteuert werden.

  • COPY_LOGIN ist die E-Mailadresse, mit der sich bei Copy.com eingeloggt werden kann
  • COPY_PASSWD das zugehörige Passwort
  • RUNAS ist der lokale Benutzer (mit Shell), der den Client ausführen soll

Alle Dateien werden in den Ordner „/opt/copycom_anget/data“ synchronisiert, das Anwendungsdaten-Verzeichnis lautet „/opt/copycom_agent/appdata“.

Changelog
v1.1
– Run-as-root Check
– Cleanup Funktion
– Abhängigkeiten überprüfen
– Small fixes

Download

Copy.com Installer v1.1

Der Code

#!/bin/bash
if [[ -z "$1" ]] || [[ -z "$2" ]] || [[ -z "$3" ]]; then
	echo "Usage: $0 COPY_LOGIN COPY_PASSWD RUNAS"
	exit 1
fi
if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

cleanup() {
rm -r Copy.tgz copy/ >/dev/null 2>&1
rm -r /opt/copycom_agent >/dev/null 2>&1
update-rc.d copycom remove >/dev/null 2>&1
rm -r /etc/init.d/copycom_agent >/dev/null 2>&1
echo "Cleaning up..."
}

IS64=`arch`
LOGGEDIN=1
USERCHK=`getent passwd ${3} | grep -vi false`
DEPENDS=`which curl`

echo -en "Checking if user ${3} exists and is valid...\t"
if [ -z $USERCHK ] ; then
	echo -e "\e[00;31m ERROR\e[00m"
	exit 1
fi
echo -e "\e[00;32m OK\e[00m"

echo -en "Checking dependencies...\t\t\t"
if [ -z $DEPENDS ] ; then
	echo -e "\e[00;31m ERROR\e[00m"
	exit 1
fi
echo -e "\e[00;32m OK\e[00m"

echo
echo "Downloading latest Copy.com Client:"
curl -# -O https://copy.com/install/linux/Copy.tgz
echo

tar xfvz Copy.tgz >/dev/null 2>&1
if [ "$IS64" == "x86_64" ]; then
	mv copy/x86_64 /opt/copycom_agent
else
	mv copy/x86 /opt/copycom_agent
fi
mkdir /opt/copycom_agent/appdata
mkdir /opt/copycom_agent/data
touch /opt/copycom_agent/appdata/synclog.txt
chown -R ${3}:${3} /opt/copycom_agent

echo -en "Waiting for first login...\t\t\t"
su ${3} -c "/opt/copycom_agent/CopyConsole -data=/opt/copycom_agent/appdata -u=${1} -p=${2} -r=/opt/copycom_agent/data >/dev/null 2>&1 &"
while [ $LOGGEDIN -gt 0 ]; do
        LOGGEDIN=$(cat /opt/copycom_agent/appdata/synclog.txt | grep -i "U-LOGIN-SUCCESS" >/dev/null 2>&1)$?
        RETRY=$(($RETRY+1))
        if [ $RETRY -gt 10 ]; then
			echo -e "\e[00;31m ERROR (wrong user?)\e[00m"
			cleanup
			exit 1
		fi
        sleep 1
done
echo -e "\e[00;32m OK\e[00m"

echo -en "Sending TERMSIG to CopyConsole...\t\t"
kill -15 `pidof CopyConsole` >/dev/null 2>&1
sleep 2
killall CopyConsole >/dev/null 2>&1
echo -e "\e[00;32m OK\e[00m"

echo -en "Installing INIT-script for CopyConsole...\t"
echo "#!/bin/bash
### BEGIN INIT INFO
# Provides:          CopyConsole
# Required-Start:    \$local_fs \$remote_fs \$network
# Required-Stop:     \$local_fs \$remote_fs \$network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start or stop CopyConsole
### END INIT INFO

RUNAS=${3}

start() {
   echo \"Starting CopyConsole...\"
       if [ -x /opt/copycom_agent/CopyConsole ]; then
           HOME=\"/opt/copycom_agent\" start-stop-daemon -b -o -c \$RUNAS -S -u \$RUNAS -x /opt/copycom_agent/CopyConsole -- -daemon -data=/opt/copycom_agent/appdata
       fi
}
 
stop() {
   echo \"Stopping CopyConsole...\"
       if [ -x /opt/copycom_agent/CopyConsole ]; then
           start-stop-daemon -o -c \$RUNAS -K -u \$RUNAS -x /opt/copycom_agent/CopyConsole
       fi
}
 
status() {
       ccpid=\`pgrep -u $RUNAS CopyConsole\`
       if [ -z ccpid ] ; then
           echo \"CopyConsole for user $RUNAS: not running.\"
       else
           echo \"CopyConsole for user $RUNAS: running (pid $ccpid)\"
       fi
}
 
case \"\$1\" in
 
   start)
       start
       ;;
   stop)
       stop
       ;;
   restart|reload|force-reload)
       stop
       start
       ;;
   status)
       status
       ;;
   *)
       echo \"Usage: copycom {start|stop|reload|force-reload|restart|status}\"
       exit 1
 
esac
 
exit 0" > /etc/init.d/copycom
chmod +x /etc/init.d/copycom
update-rc.d copycom defaults >/dev/null 2>&1
if [ $? -ne 0 ] ; then
	echo -e "\e[00;31m ERROR\e[00m"
	cleanup
	exit 1
fi
echo -e "\e[00;32m OK\e[00m"
echo -en "Starting CopyConsole service...\t\t\t"
/etc/init.d/copycom start >/dev/null 2>&1
if [ $? -ne 0 ] ; then
	echo -e "\e[00;31m ERROR\e[00m"
	cleanup
	exit 1
fi
echo -e "\e[00;32m OK\e[00m"