« Posts under WeTab

Einige meiner WeTab Skripte…

Hi,

da ich ja mein WeTab wieder hergegeben habe, will ich einige der zusammengeschriebenen/zusammengesuchten/selbst erstellten Skripte nicht vorenthalten:

1. Rotation in den Hochkant-Modus mit korrekter Touch Ausrichtung (Multitouch)

#!/bin/bash

# Prueft ob $HOME/.left existiert
# wenn ja -> rechts drehung
# wenn nein -> links drehung

FILE=$HOME/.left

if [ -f "$FILE" ];
then
	rm -f $FILE;
	xrandr -o normal;
	xinput set-int-prop 9 "Evdev Axes Swap" 8 0;
	xinput set-int-prop 9 "Evdev Axis Calibration" 32 0 32760 0 32760;
	xinput set-int-prop 10 "Evdev Axes Swap" 8 0;
	xinput set-int-prop 10 "Evdev Axis Calibration" 32 0 32760 0 32760;
else
	touch $FILE;
	xrandr -o left;
	xinput set-int-prop 9 "Evdev Axes Swap" 8 1;
	xinput set-int-prop 9 "Evdev Axis Calibration" 32 32760 0 0 32760;
	xinput set-int-prop 10 "Evdev Axes Swap" 8 1;
	xinput set-int-prop 10 "Evdev Axis Calibration" 32 32760 0 0 32760;
fi

exit 0

Das konnte man sich in Gnome auf den Sensorbutton legen und damit dann in den Hochkant-Modus wechseln.
Quelle dafür war The WeTab Blog hier. (Dort findet sich auch die Herkunft der Zahlen, damit sind dann auch andere Drehungen möglich!) Unter Natty hat sich wohl was geändert, das findet sich hier.

Benutzung: ./rotate.sh (vllt. als root, weiß ich grad nicht). -> wechselt zwischen hochkant und quermodus.

2. SwitchWirelessTAB.sh – damit konnte man (soweit es eben ging ohne das closed source pegaap Kernel Modul) BT/WLAN/UTMS/GPS an/aus schalten. Viele der Features sind aus der tiitoo-3g-functions.sh(gibt es hier) abgeschaut. Benötigt wird dafür rfkill sowie notify-send und gpsd.

#!/bin/bash

##########Exec######################
if lsusb | grep '19d2:0031 ONDA Communication' > /dev/null ;
then
	dev=/dev/ttyUSB2
elif lsusb | grep '19d2:0063 ONDA Communication' > /dev/null ;
then
	dev=/dev/ttyUSB3
elif lsusb | grep '12d1:1003 Huawei Technologies' > /dev/null ;
then
	dev=/dev/ttyUSB1
elif lsusb | grep '12d1:140c Huawei Technologies' > /dev/null ;
then
	dev=/dev/ttyUSB3
else
	dev=/dev/ttyUSB4
fi

is_modem_HuaweiEM770W() {
	lsusb | grep "12d1:1404" &> /dev/null
	return $?
}

exec_at_command() {
	chat -e ABORT OK ABORT ERROR '' ATE0 OK  < $dev 2> /dev/null > $dev
	output=$(chat -e ABORT OK ABORT ERROR '' "AT$1" OK < $dev 2>&1 > $dev)
	if echo $output | grep ERROR &> /dev/null ; then
		echo $output
		return 1
	else
		new_output=""
		# ignore unnecessary and unmotivated output from modem
		for word in $output; do
			word_out=1
			for ignored_word in OK POSITION; do
				if echo $word | grep $ignored_word &> /dev/null; then
					word_out=0
					break
				fi
			done
			if [ $word_out -eq 1 ]; then
				new_output="$new_output $word"
			fi
		done
	       echo $new_output
	fi
}

##########UMTS Funktionen##############
get_rf_switch_state() {
	local out=$(exec_at_command "\^RFSWITCH?")
	if [ "$out" == "^RFSWITCH:1,1" ]; then
		return 1;
	else
		return 0;
	fi
}

set_rf_switch_state() {
	local out=$(exec_at_command "\^RFSWITCH=$1")
}

##########GPS Funktionen#################

enable_gps() {
	AGPS_SUPL="http://supl.nokia.com"
	if [ -f /etc/sysconfig/agps ]; then
		. /etc/sysconfig/agps
	fi
	out=$(exec_at_command "\^WPURL=$AGPS_SUPL")
	if [ $? -ne 0 ]; then
		break
	fi
	# configure AGPS to work speed optimal
	out=$(exec_at_command "\^WPDOM=2")
	if [ $? -ne 0 ]; then
		break
	fi

	out=$(exec_at_command "\^WPDGP")
}

disable_gps() {
	local out=$(exec_at_command "\^WPEND")
}

#####################################

wifi=$(rfkill list | grep "Wireless LAN" -A 1 | grep Soft | tr -d "[:blank:]");
bt=$(rfkill list | grep Bluetooth -A 1 | grep Soft | tr -d "[:blank:]");
get_rf_switch_state;
wwan=$?

if [ "$1" == "wlan" ];
then
	name="WIFI";
	if [ "$wifi" == "Softblocked:no" ];
	then
		rfkill block wifi;
		sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde deaktiviert.";
	elif  [ "$wifi" == "Softblocked:yes" ];
	then
		rfkill unblock wifi;
		sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde aktiviert.";
	else
		sudo -u user notify-send -t 1 "Switch Wireless" "$name: Fehler beim Umschalten.";
	fi;
elif [ "$1" == "wwan" ];
then
	name="WWAN";
	if [ $wwan -eq 0 ];
	then
		set_rf_switch_state 1
		sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde aktiviert.";
	else
		set_rf_switch_state 0
		sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde deaktiviert.";
	fi;
elif [ "$1" == "wwand" ];
then
	set_rf_switch_state 0
elif [ "$1" == "gpsa" ];
then
	name="GPS";
	enable_gps
	sleep 5
	gpsd -n -b /dev/ttyUSB3
	sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde aktiviert.";
elif [ "$1" == "gpsd" ];
then
	name="GPS";
	killall gpsd
	disable_gps
	sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde deaktiviert.";
elif [ "$1" == "gpsdd" ];
then
	disable_gps
elif [ "$1" == "bt" ];
then
	name="BT";
	if [ "$bt" == "Softblocked:no" ];
	then
		rfkill block bluetooth;
		sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde deaktiviert.";
	elif  [ "$bt" == "Softblocked:yes" ];
	then
		rfkill unblock bluetooth;
		sudo -u user notify-send -t 1 "Switch Wireless" "$name wurde aktiviert.";
	else
		sudo -u user notify-send -t 1 "Switch Wireless" "$name: Fehler beim Umschalten.";
	fi;
else
	if [ $wwan -eq 1 ] && [ "$wifi" == "Softblocked:yes" ] ;
	then
		set_rf_switch_state 0
		rfkill unblock wifi;
		sudo -u user notify-send -t 1 "Switch Wireless" "WWAN wurde deaktiviert. WIFI wurde aktiviert.";
	elif [ $wwan -eq 0 ] && [ "$wifi" == "Softblocked:no" ] ;
	then
		set_rf_switch_state 1
		rfkill block wifi;
		sudo -u user notify-send -t 1 "Switch Wireless" "WWAN wurde aktiviert. WIFI wurde deaktiviert.";
	elif [ $wwan -eq 0 ] && [ "$wifi" == "Softblocked:yes" ] ;
	then
		rfkill unblock wifi;
		sudo -u user notify-send -t 1 "Switch Wireless" "WWAN bleibt deaktiviert. WIFI wurde aktiviert.";
	elif [ $wwan -eq 1 ] && [ "$wifi" == "Softblocked:no" ] ;
	then
		set_rf_switch_state 0
		sudo -u user notify-send -t 1 "Switch Wireless" "WWAN wurde deaktiviert. WIFI bleibt aktiviert.";

	else
		sudo -u user notify-send -t 1 "Switch Wireless" "WWAN/WIFI: Fehler beim Umschalten.";
	fi;
fi;

Man muss es als root aufrufen und vorher user durch den “normalen” Nutzernamen ersetzen in den notify-send Zeilen.
(sonst kommen die Notfiys manchmal nicht irgendwie, wenn sie als root geschickt werden.)
Anwendung: (es kommt immer eine Notification via Notify-Send, wenn nicht explizit anders angegeben)
sudo ./SwitchWireless.sh -> Wechsel zwischen Wlan/UMTS, wenn beiden an bzw. aus sind. schaltet es Wlan ein und Umts aus.
sudo ./SwitchWireless.sh wwan -> Schaltet UMTS an bzw. aus im Wechsel.
sudo ./SwitchWireless.sh wwand -> Schaltet UMTS aus ohne Meldung. (für boot eintrag in /etc/rc.local)
sudo ./SwitchWireless.sh wlan -> Schaltet Wlan an bzw. aus im Wechsel.
sudo ./SwitchWireless.sh gpsa -> aktiviert GPS und startet gpsd.
sudo ./SwitchWireless.sh gpsd -> deaktiviert GPS und killt gpsd.
sudo ./SwitchWireless.sh gpsdd -> deaktiviert GPS ohne Meldung. (für boot eintrag in /etc/rc.local)
sudo ./SwitchWireless.sh bt -> Schaltet Bluetooth im Wechsel an/aus

Man sollte beim Skript natürlich als Owner root setzen und die Bearbeitungsrechte für alle anderen User entziehen. Danach kann es ab in die Sudoers Datei und man braucht kein Passwort mehr dafür eingeben -> Icon auf dem Desktop für die verschiedenen Schalter erzeugen (als Tipp!) ;)

Bei Gnome 3 sollte man

sudo -u  notify-send -t 1 ...

durch

sudo -u  notify-send --hint=int:transient:1 -t 1 ...

ersetzen, damit die Notifications von selbst verschwinden.
Ich hoffe es sind keine großen Schnitzer drin, das ist nämlich nicht die aktuellste Version – ich hab die neuere nur nicht mehr.

Vllt. kann ja jemand etwas damit anfangen ;)

Sorry für die teilweise beschissene Einrückung, das liegt an dem Quelltext-Anzeig-Plugin. (“Syntax Highlighter and Code Prettifier Plugin for WordPress”)… EDIT: Jetzt passt es :)

CrystalHD, Libcrystalhd und Gstreamer Plugin in Ubuntu kompilieren

Da mein neues Wetab ja ein schönes Broadcom CrystalHD Modul drin hat, würde ich das natürlich gerne vollständig in Ubuntu nutzen, was ich nun auch endlich geschafft habe, einschließlich des Gstreamer Plugins u.a. für den Totem Video Player.  8-)

Da ich Ubuntu 10.10 auf dem Wetab nutze, sollte das analog auf anderen Devices funktionieren.

Ubuntu 10.10 bringt ebenfalls ein eher beschissenes crystalHD Modul bereits mit, dieses müssen wir zwangsläufig ersetzen.

Aber zu erst alle Abhängigkeiten installieren:

sudo apt-get install checkinstall git-core autoconf build-essential subversion dpkg-dev fakeroot pbuilder build-essential dh-make debhelper devscripts patchutils quilt git-buildpackage pristine-tar git yasm zlib1g-dev zlib-bin libzip-dev libx11-dev libx11-dev libxv-dev vstream-client-dev libgtk2.0-dev libpulse-dev libxxf86dga-dev x11proto-xf86dga-dev git libgstreamermm-0.10-dev libgstreamer0.10-dev automake

Nachdem das alles installiert und erledigt ist, legen wir los:

git clone git://git.wilsonet.com/crystalhd.git
cd crystalhd/driver/linux
autoconf
./configure
make
sudo checkinstall --fstrans=no

Hierbei kommt ein Fehler, weil wir das Kernel Modul überschreiben wollen. Checkinstall hat uns (je nach gewähltem Namen) das Package erstellt, welches irgendwie .deb heißt (zur not mit ls | grep .deb rausfinden). Dieses installieren wir daher so:

sudo dpkg -i --force-overwrite .deb

Danach geht es weiter mit dem kopieren der Firmware und dem Kompilieren+Installieren von libcrystalhd:

sudo cp ../../firmware/fwbin/70015/* /lib/firmware/
cd ../../linux_lib/libcrystalhd
make
sudo checkinstall --fstrans=no

Jetzt sind wir an einem Punkt, an dem das crystalhd Modul bereits in Youtube(Flash!) funktionieren sollte, sobald wir folgendes machen:

sudo modprobe crystalhd

Damit das Modul immer automatisch geladen wird, fügen wir es ans Ende von /etc/modules an.
(echo crystalhd >> /etc/modules als root).

Prüfen ob es korrekt geladen wurde, kann man mit dmesg | grep crystal, dabei sollte dann sowas rauskommen:

[    5.029199] Loading crystalhd v3.10.0
[    5.029249] crystalhd 0000:02:00.0: Starting Device:0x1615
[    5.029284] crystalhd 0000:02:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    5.034739] crystalhd 0000:02:00.0: irq 43 for MSI/MSI-X
[    5.276152] crystalhd 0000:02:00.0: setting latency timer to 64

Sobald man nun ein crystalhd-beschleunigbares Video in Youtube/Flash ansieht, erscheint zusätzlich folgende Zeile:

[ 1772.346897] crystalhd 0000:02:00.0: Opening new user[0] handle

Übrigens funktioniert das auch mit 360p,480p und 720p Videos und nicht nur mit 1080p.

Nun wollen wir das ganze natürlich auch in Totem nutzen, daher kompilieren wir kurz noch das Gst-Plugin, Abhängigkeiten dafür haben wir schon installiert. (Das hat ganz schön gedauert bis ich herausgefunden habe wie es genau geht, da es echt viele Config Files usw. in dem Ordner gibt, die in Frage kämen und die Readme Datei alles andere als hilfreich ist.)

 cd ../../filters/gst/gst-plugin/
./autogen.sh
make
sudo checkinstall

Es kann sein das ich Abhängigkeiten vergessen habe, die Fehler sollten aber euch mitteilen was fehlt, zumindest soviel, dass es dann zum Googeln reicht  ;-)

Starten wir nun ein entsprechendes Video in Totem, sollte ebenfalls so ein Output wie oben bei einem Flashvideo in dmesg erscheinen. (Man merkt auch schnell, wenn 1080p Videos plötzlich mit relativ geringer Last flüssig laufen..)

Den ersten Teil hab ich größtenteils aus dem Beitrag von Catscrash in der Wetab-Community übernommen, danke für diese Infos! (Ich habe allerdings den Mplayer weggelassen. Braucht man nicht, wenn Totem es tut.)

Besucht auch die WeTab-Community und The Wetab Blog. Eigentlich die 2 besten Anlaufstellen für “WeTabber”!

Eine Anmerkung noch: Mit VLC geht das leider nicht, da dieser keine GStreamer Plugins nutzt und auch die Entwickler kein Interesse haben, das CrystalHD Modul zu unterstützen. Sehr Schade.  :-(

Achja, Danke an Jarod Wilson für den Treiber bzw. das GIT Repo.

Nach jedem Kernelupdate müsst ihr übrigens das Kernelmodul neu installieren.

Das wars mit meinem ersten Beitrag zum WeTab, ich denke es folgen vllt. noch weitere.