You are here: start » tipsandtricks

Indicator applet to toggle unity launcher autohide

#!/usr/bin/python
# Launcher Toggle v.1
# (c) Amos Brocco
from gi.repository import Gtk, GLib, Gio
from gi.repository import AppIndicator3 as appindicator
import os
 
icons = ("face-smile", "face-wink")
 
def cb_exit(w, data):
	Gtk.main_quit()
 
def get_state():
	return gsettings.get_int('launcher-hide-mode')
 
def update_icon(state):
	ind_app.set_icon(icons[get_state()])
 
def cb_togglelauncher(w, data):
	state = (get_state() + 1) % 2
	gsettings.set_int('launcher-hide-mode', state)
	update_icon(state)
	return 1
 
gsettings = Gio.Settings.new_with_path('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/')
ind_app = appindicator.Indicator.new_with_path ( \
"showlauncher-indicator",\
icons[get_state()],\
appindicator.IndicatorCategory.APPLICATION_STATUS,\
os.path.dirname(os.path.realpath(__file__)))
 
ind_app.set_status (appindicator.IndicatorStatus.ACTIVE)
 
menu = Gtk.Menu()
toggle_item = Gtk.MenuItem("Toggle")
menu.append(toggle_item)
toggle_item.connect("activate", cb_togglelauncher, '')
toggle_item.show()
exit_item = Gtk.MenuItem("Exit")
menu.append(exit_item)
exit_item.connect("activate", cb_exit, '')
exit_item.show()
ind_app.set_menu(menu)
Gtk.main()

HP Touchsmart TM2 rotate display using rotate button

Save this in a file (ex. key-rotate-display.sh) give it execute permissions and add to startup applications

#!/bin/bash
HP_WMI_NAME="HP WMI hotkeys"
KEY_ID="161"
 
primaryScreen=`xrandr | grep primary | cut -d' ' -f1`
touchDev=`xinput --list | grep "Wacom .* touch" | grep -o "id=[0-9]*\W" | grep -o "[0-9]*"`
eraserDev=`xinput --list | grep "Wacom .* eraser" | grep -o "id=[0-9]*\W" | grep -o "[0-9]*"`
stylusDev=`xinput --list | grep "Wacom .* stylus" | grep -o "id=[0-9]*\W" | grep -o "[0-9]*"`
 
function rotate_display() {
	ROTATE="NONE"
	DISP="normal"
	VGADISP="normal"
	if [ "$1" == "half" ]; then
	    ROTATE="HALF"
	    DISP="inverted"
	    VGADISP="normal"
	elif [ "$1" == "left" ]; then
	    ROTATE="CCW"
	    DISP="left"
	elif [ "$1" == "right" ]; then
	    ROTATE="CW"
	    DISP="right"
	fi
	xsetwacom set "$touchDev" Rotate $ROTATE
	xsetwacom set "$eraserDev" Rotate $ROTATE
	xsetwacom set "$stylusDev" Rotate $ROTATE
	xrandr -o $DISP
}
 
trap "kill 0" SIGINT
 
exec 3< <(stdbuf -o0 xinput test "$HP_WMI_NAME")
 
while read <&3 data; do
	if echo $data | grep "$KEY_ID" | grep "release" >/dev/null; then
		currentRotation=$(xrandr -q -v | grep "$primaryScreen" | cut -d ' ' -f 5 | grep -v '(')
		nextRotation=""
		if [ -z "$currentRotation" ]; then
			nextRotation="right"
		elif [ "$currentRotation" == "right" ]; then
			nextRotation="half"
		elif [ "$currentRotation" == "inverted" ]; then
			nextRotation="left"
		else
			nextRotation="none"
		fi
		rotate_display $nextRotation
	fi
done

Wacom Calibration Script (for Touchsmart TM2, X220t, X200t)

Because gnome tool does not work

#!/bin/bash
X_IFS=${IFS}
IFS='%'
DEVICES=( `xsetwacom --list devices | tr "\t" "%" | cut -d% -f1 |  tr "\n" ","` )
IFS=','
DEVICES=( $DEVICES )
value=$(zenity --list --title "Window title" --text "Select the input device you want to calibrate" --column "Detected input devices" "${DEVICES[@]}" )
value=$(echo $value | sed 's/ *$//g')
IFS=${X_IFS}
xinput_calibrator --device "$value" > /tmp/__xinput_cal.data
MinX=$(cat /tmp/__xinput_cal.data | grep Option | grep MinX | awk '{print $3}' | tr \" " ")
MaxX=$(cat /tmp/__xinput_cal.data | grep Option | grep MaxX | awk '{print $3}' | tr \" " ")
MinY=$(cat /tmp/__xinput_cal.data | grep Option | grep MinY | awk '{print $3}' | tr \" " ")
MaxY=$(cat /tmp/__xinput_cal.data | grep Option | grep MaxY | awk '{print $3}' | tr \" " ")
rm /tmp/__xinput_cal.data
xsetwacom --set "$value" area $MinX $MinY $MaxX $MaxY

Fix NVIDIA Optimus / Intel libGL conflict on SL 6.1

#!/bin/bash
cd /usr/lib
rm libGL.so.1
ln -s libGL.so.1.2 libGL.so.1

Fix "Location is not folder" / exo-utils problem / use nautilus in xfce

Create a open.sh file somewhere with:

#!/bin/sh
if [ $# = 0 ]; then
        nautilus "$PWD"
elif [ -d "$1" ]; then
        nautilus "$1"
else
        xdg-open "$1"
fi

make it executable, then run

exo-preferred-applications

and set your script as the default file manager. Now for files the default viewer will be opened (for example, evince for pdf) and nautilus for folders.

Fix crackling sound on USB audio with nvidia card

If the USB controller shares interrupts with the NVIDIA card, Powermizer could cause crackling sound when an USB sound card or headphone is connected.

To solve, I forced the Powermizer settings at the lowest performance by adding

Option  "Coolbits" "1"
Option  "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerLevel=0x3; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3"

To the “Device” section in xorg.conf Other info at http://linux.aldeby.org/nvidia-powermizer-powersaving.html

ClipFuser

Simple FUSE module that manages the files that have been copied / pasted

#!/usr/bin/env python
# ClipFuser
# FUSE filesystem to display files in the clipboard
# Copyright (C) 2011  Amos Brocco
# License: LGPL3
 
# version 0.01 - February 1. 2011
 
# FIXME: Crashes with non-local uris
 
import os, sys
import gio
import urllib
import fuse
from fuse import Fuse
import gtk
import time
from threading import Thread,Lock
 
fuse.fuse_python_api = (0, 2)
fuse.feature_assert('has_init')
 
class ClipWatcher(Thread):
	def __init__(self, fuser):
		Thread.__init__(self)
		self.__fuser = fuser
		self.clipboard = gtk.Clipboard()
		self.shouldRun = True
 
	def run(self):
		print "Starting watcher"
		while self.shouldRun:
			time.sleep(1)
			ret = self.clipboard.wait_for_contents("text/uri-list")
			if ret != None:
			    self.clipboard.request_contents("text/uri-list", self.updateFromClipboard)
 
	def updateFromClipboard(self, clipboard, selection_data, data=None):
		contents = selection_data.data
		if contents is not None:
		    contents = contents.split("\r\n")
		    ccontents = {}
		    for e in contents:
		        if e.strip() != "":
		            f = gio.File(uri=e)
		            rpath = f.get_path()
		            rpath.replace(" ","%20")
		            ccontents['/'+f.get_basename()] = rpath
		    self.__fuser.update(ccontents)
 
	def cleanup(self):
		self.shouldRun = False
 
 
class ClipFuser(Fuse):
 
    def __init__(self, *args, **kw):
        Fuse.__init__(self, *args, **kw)
        self.ccontents = {}
	self.watcher = ClipWatcher(self)
	self.watcher.start()
	self.mutex = Lock()
 
    def update(self, c):
	self.mutex.acquire()
	self.ccontents = c
	self.mutex.release()
 
    def cleanup(self):
	self.watcher.cleanup()
 
    def getattr(self, path):
	self.mutex.acquire()
	data = self.ccontents
        self.mutex.release()
        if data.has_key('/'+path):
            path = data['/'+path]
            return os.lstat(path)
        elif path == '/':
            return os.lstat("./")
        else:
            return os.lstat(path)
 
    def readdir(self, path, offset):
	self.mutex.acquire()
	data = self.ccontents
        self.mutex.release()
        if (path == '/'):
            for e in data.keys():
                yield fuse.Direntry(data[e])
        else:
            for e in os.listdir("."+path):
                yield fuse.Direntry(e)
 
def main():
    server = ClipFuser()
    server.parse(values=server, errex=1)
    server.main()
    server.cleanup()
 
 
if __name__ == '__main__':
    main()
tipsandtricks/start.txt · Last modified: 2014/03/04 15:00 by attila
Kleine Websites, die ein Wiki als CMS verwenden.de