Eure Thinkpad-Tweaks?

mikar

Active member
Themenstarter
Registriert
27 Jan. 2009
Beiträge
1.401
Nabend zusammen.

Ich habe mir die Tage einen acpid-handler zusammengebastelt, um endlich mal alle FN-Kombis nutzen zu können.
Mich würde daher mal interessieren, womit ihr euch so das (Thinkpad-)Leben in Linux angenehmer gestaltet.

Bei mir hat sich im Laufe der Zeit einiges angesammelt:
1) In der Autostart-Datei von Openbox:
Beim Start prüfen, ob das TP gedockt ist und dementsprechend unterschiedliche Conky-Konfigurationen laden:
Code:
dock=$(cat /sys/devices/platform/dock.0/docked)
case "$dock" in
1)
   xset s off -dpms
   conky -c ~/.conkydock &
   ;;
0)
   xset s off dpms 0 0 300
   conky -c ~/.conkynb &
   ;;
esac

2) /etc/acpi/handler.sh, um alle FN-Hotkeys nutzen zu können.

3) Brightness-Skript für die commandline:hell (siehe auch hier.

4) Die Multimedia-Tasten lassen sich bei mir nicht über acpid ansprechen, daher hab ich folgendes in der Konfigurationsdatei von Openbox: http://pastebin.com/3BFrt8K7

5) In der rc.local prüfe ich nochmal, ob der Laptop in der Dock steht und mounte dann entsprechend meine Festplatte im Ultrabay. Außerdem setze ich die Trackpoint-Sensibilität:
Code:
docked=`cat /sys/devices/platform/dock.0/docked`
sdb=`ls /dev | grep sdb | wc -l`
(if [ `echo $docked` = 1 ] && [ `echo $sdb` = 2 ];then
  hdparm -B 127 -S 36 -W 1 -M 128 /dev/sdb >/dev/null 2>&1
  echo 12000 > /proc/sys/vm/dirty_writeback_centisecs
  (sleep 5 && mount /media/daten >/dev/null) &
fi) &

echo 240 > /sys/devices/platform/i8042/serio1/sensitivity
echo 160 > /sys/devices/platform/i8042/serio1/speed

6) In meiner Conkyrc werden Stromverbrauch und verbleibende Laufzeit übers Smapi-Modul angezeigt:
Code:
${if_smapi_bat_installed 0}  |  Power: ${color1}${smapi_bat_power 0}W${color}  |  Remaining: ${color1}${execi 15 echo "$(cat /sys/devices/platform/smapi/BAT0/remaining_running_time)/60" | bc -l | cut -c1-3}h${color}  |  Akku: ${color1}${smapi_bat_perc 0}%${color}${endif}  |  AC: ${color1}${acpiacadapter}${color}  |
Anhang anzeigen 29479

Ich habe das ganze nochmal als git repo zusammengefasst: http://github.com/mikar/x200s

Falls ihr also auch so kleine Tweaks, Tricks oder einfach nur Workarounds habt, immer her damit ;).

Grüße,
mikar
 

Anhänge

  • w_11.05.10_20-55-57.jpg
    w_11.05.10_20-55-57.jpg
    10,8 KB · Aufrufe: 107
Hallo linrunner,

linrunner' schrieb:
hier hat kürzlich jemand eine ähnliche Frage gestellt. udev-Skripte für die Ultrabay, die Du modifizieren könntest findest Du hier.
Herzlichen Dank, das hat mir sehr geholfen!

linrunner' schrieb:
ps. und laß bitte einen Mod einen extra Thread aus deinem Thema machen. Hier gehören fertige Lösungen rein.
Dann machen wir es doch einfach so: Um on topic zu bleiben, poste ich jetzt meine funktionierende Lösung, mit der ich meine UltraBase-HDD mounte und auf den externen Monitor umzuschalte, wenn mein Laptop im Dock liegt. Ich hoffe, dieses banale Zeug langweilt euch nicht zu sehr :-)

Hardware: X201 + UltraBase (mit Festplatte)
System: Ubuntu 10.4

Die Arbeit erledigt bei mir das folgende Skript /etc/tools/events.sh
Code:
#!/bin/bash
docked() {
        DOCKED=$(cat /sys/devices/platform/dock.0/docked)
        return $(($DOCKED==0))
}

# My hdd mount point defined in /etc/fstab
HDD=/media/Sicherung

# enable or disable external display
# $1: "enable" or "disable"
display() {
                if [[ -z "$DISPLAY" ]]; then
                        export DISPLAY=:0.0
                fi

                case "$1" in
                        enable)
                        if docked; then
                                # wait for X-server to start
                                for ((i=1;i<=10;i++)); do
                                        if [[ -n `pgrep "X"` ]]; then
                                                # switch to external display
                                                xrandr --output LVDS1 --off --output HDMI1 --primary --auto
                                                break
                                        fi
                                        sleep 1
                                done
                        fi
                        ;;

                        disable)
                        for ((i=1;i<=10;i++)); do
                                if [[ ! -z `pgrep "X"` ]]; then
                                        # disable external display if present
                                        if docked; then xrandr --output LVDS1 --primary --auto --output HDMI1 --off
                                        else xrandr --output LVDS1 --primary --auto; fi
                                        break
                                fi
                                sleep 1
                        done
                        ;;
                        
                esac
}

# mount or umount external HDD
# $1: "mount" or "umount"
hdd() {
	case "$1" in
		mount)
                        # mount UltraBase hdd if not mounted yet
			if ! (mount | grep $HDD >/dev/null); then
				mount $HDD 
			fi
		;;
		umount)
                        # umount hdd if mounted
			if (mount | grep $HDD >/dev/null); then
				umount $HDD 
			fi
		;;
	esac
}

case "$1" in
	resume|thaw)
        # Since "events.sh dock" will be called soon, here is nothing to do
	;;
	suspend|hibernate)
		if docked; then
                        # although "events.sh undock" will be called, too, I prefer to unmount the hdd here
			hdd umount
			echo 1 > /sys/devices/platform/dock.0/undock
		fi
	;;
	startup)
		if docked; then
			hdd mount
                        # display will be enabled by ubuntu...
		fi
	;;
	dock)
		display enable
                # make sure that the ultrabase hdd is ready
		sleep 2
		hdd mount
	;;
	undock)
		hdd umount
		display disable
		sleep 1
	;;
esac

Um das Skript bei den entsprechenden events aufzurufen, ist noch Folgendes zu tun:

1. Für suspend, resume, etc. einen Symlink
/etc/pm/sleep.d/events.sh -> /etc/tools/events.sh
erzeugen.

2. Die Datei /lib/udev/rules.d/85-thinkpad-x201.rules mit folgendem Inhalt erstellen.
Code:
KERNEL=="dock.0", ACTION=="change", RUN+="/etc/tools/dock.sh"

/etc/tools/dock.sh ruft events.sh auf und sieht so aus:
Code:
#!/bin/bash
docked() {
	DOCKED=$(cat /sys/devices/platform/dock.0/docked)
	return $(($DOCKED==0))
}

if docked; then 
	/etc/tools/events.sh dock
else
	/etc/tools/events.sh undock
fi

3. Und natürlich noch in /etc/rc.local den Aufruf
Code:
/etc/tools/events.sh startup
einfügen.

Viele Grüße, morger
 
Thinkpad Fn+F6 hack

Die FN+F6 Kombination für Bluetooth oder WWAN ist ja bekannt. Ich habe mir noch zusätzlich eine grafische Ausgabe gehackt (bin kein Guru mit bash, entschuldigt meine Scripts :p )


Klassiches Setup für FN+F6 wird /etc/acpi/wwan_toggle.sh
Code:
#!/bin/bash
# WWAN toggle script

CONTROL_DEVICE="/dev/ttyACM2"
export DISPLAY=:0
#case=`cat /sys/class/rfkill/rfkill1/state`
#case "$case" in

rfkill list | sed -n -e'/tpacpi_wwan_sw/,/^[0-9]/p' | grep -q 'Soft blocked: yes'
wwan_state=$?

case "$wwan_state" in

	
	1)
		echo "Disabling WWAN"
		python _PFAD_ /wwan_notify.py off
		/usr/sbin/chat -v "" "AT+CFUN=0" > $CONTROL_DEVICE < $CONTROL_DEVICE
		rfkill block wwan
		;;
	0)
		echo "Enabling WWAN"
		python _PFAD_ /wwan_notify.py on

		rfkill unblock wwan
		while [ ! -c $CONTROL_DEVICE ]; do sleep 0.5; echo -n "."; done
		/usr/sbin/chat -v "" "AT+CFUN=1" > $CONTROL_DEVICE < $CONTROL_DEVICE
		;;
	*)
		echo "unexpected input"
		exit 1
		;;
esac
exit 0

und dann noch die wwan_notify.py (ich habe sie in meinem home/scripts)
Code:
#!/usr/bin/env python

import string
import sys
import pygtk
pygtk.require('2.0')
import pynotify
import time

if not (pynotify.init("Broadband Notificaion")):
	sys.exit(1)

if sys.argv[1]:
	argument = sys.argv[1]
ICON_ON = "file:///usr/share/icons/hicolor/scalable/apps/gdu-smart-healthy.svg"
ICON_OFF = "file:///usr/share/icons/hicolor/scalable/apps/gdu-smart-failing.svg"

def icon_uri():
	if (argument == "on"):
		icon_uri = ICON_ON
	else:
		icon_uri = ICON_OFF
	return icon_uri

def status_text():
	if (argument == "on"):
		message = "Starting Mobile Broadband"
	else:
		message = "Stopping Mobile Broadband"
	return message

def display_message(message):
	n = pynotify.Notification("Mobile Broadband", message , icon_uri())
	n.set_urgency(pynotify.URGENCY_CRITICAL)
	n.set_timeout(3000) # 3 seconds

	if not n.show():
		print "Failed to send notification"
		sys.exit(1)

display_message(status_text())


exit(0)

und weil es ein dreckiger Hack ist muss wwan_notify.py dem User gehören und per
Code:
chmod +s wwan_notify.py
geändert werden. Leider funktioniert dieses Script so nur für Systeme mit nur einem User.
Vielleicht gibt es ja hier jemanden der mein Script so modifizieren will dass es sich das aktuelle Display selber herraussucht :)
 
Hey,

ich habe mir die Tage ein Bash-Skript gebastelt, um den Energieverbrauch etwas besser nachvollziehen/beurteilen zu können. Vielleicht ist es für den ein oder anderen von Nutzen. Was es genau kann:

a) Es kann den Energieverbrauch der nächsten X Sekunden in einer Datei aufzeichnen.
b) Aus der erstellten Datei kann es den Durchschnittsverbrauch errechnen.
c) Und schließlich kann es mit Hilfe von gnuplot eine 2D-Grafik erstellen.

Das Endergebnis sieht dann so aus:

example_datafile.png


Das Skript gibt's hier:
GitHub und AUR

Wenn ihr Verbesserungsvorschläge habt, immer her damit :).

Grüße,
mikar
 
Zuletzt bearbeitet:
@mikar danke für das Skript, ich nutze es zwar nicht auf nem Thinkpad, tut aber mit 1,2 Modifikationen trotzdem super auf einem "normalen" Laptop ;)

Edit: Schade dass du die Average Geschichte nicht eingebaut hast, zumindest fand ich keine Stelle es zu aktivieren ;)
 
Zuletzt bearbeitet:
Also, Nichts Besonderes, aber für mich sehr praktisch. Ich verwende wvdial (Nokia 5230+Bluetooth) wenn ich keine Wlan/Lan Internetverbindung habe. Dann habe ich einen Starter in Panel eingeleget, um alles mit einem Klick zu aktivieren (ausser SUDO Passwort-ich sollte es manuell eintragen):
Panel Starter:
Code:
#! /bin/bash

sudo /usr/bin/rfcomm bind 0 C8:97:9F:75:3C:9D 22
sudo wvdial

WVDIAL how to:
http://wiki.ubuntuusers.de/UMTS_per_Mobiltelefon

EDIT: Habe gerade gemerkt, dass mein Tweak in 11.04 nicht mehr notwendig ist. Nach erster Bluetooth-Pairing mit Handy, hat 11.04 automatisch Handy als Modem eingestellt-jetzt habe ich meine BT Modem Verbindung in Netzwerk Applet gelistet. Und es funktioniert ganz automatisch...Schön...
 

Anhänge

  • Bildschirmfoto.jpg
    Bildschirmfoto.jpg
    23,5 KB · Aufrufe: 29
Zuletzt bearbeitet:
Caps Lock ausschalten :-)

In ~/.profile folgende Zeile einfügen (am Ende):
Code:
[ -n "$DISPLAY" ] && xmodmap -e "remove lock = Caps_Lock"
 
um den Desktop zu wechseln:
.Xmodmap
Code:
keycode 166 = F19
keycode 167 = F20
Spielkram:
.bashart
Code:
                _____ _     _       _                    _ 
               |_   _| |__ (_)_ __ | | ___ __   __ _  __| |
                 | | | '_ \| | '_ \| |/ / '_ \ / _` |/ _` |
                 | | | | | | | | | |   <| |_) | (_| | (_| |
                 |_| |_| |_|_|_| |_|_|\_\ .__/ \__,_|\__,_|
                                        |_|
 
'less' mit Syntaxhighlighting

Moin!

Irgendwie hatte mich immer gestört, dass more und less kein Syntaxhighlighting bieten; zumindest für less habe ich unter Ubuntu 11.10 (bei anderen Distros möglicherweise Pfade anpassen) eine wirklich einfache Möglichkeit gefunden (Quelle):

Pakete vim und vim-runtime installieren, danach einen Eintrag zur ~/.bashrc hinzufügen:
Code:
alias vess='/usr/share/vim/vim73/macros/less.sh'
Danach entweder Ab- und wieder Anmelden oder wahlweise source ~/.bashrc eingeben. Statt less wird nun vess aufgerufen (vess /pfad/dateiname); Ergebnisse sehen dann so aus:

fstab - (-etc) - VIM_001.jpg rc.local - (-etc) - VIM_002.jpg
Ansicht schließen mit q.

Das Gute daran ist, dass man nichts weiter einrichten muss. Vorher hatte ich mit pygmentize experimentiert, aber das funktionierte nur einwandfrei mit Dateien, die einen Suffix oder Dateiangaben wie z.B. #!/bin/sh haben; bei /etc/fstab etwa ging trotz korrekter Angabe des Mime-Typs in der Konfig nichts.
 
@nilfilter: So unterscheiden sich die Geschmäcker: Mich treibt jegliches voreingestellte bunte Syntax-Highlighting schier in den Wahnsinn, und deswegen ist es eines der ersten Dinge, die bei meinen Installationen abgeschaltet werden. Mich lenken diese zusätzlichen Farbhervorhebungen einfach viel zu sehr vom wesentlichen ab.

Da ich bisher noch keine vorgefertigte Lösung gefunden habe, um bei Nutzung eines zusätzlichen Ultrabay-Akkus zu verhindern, dass selbiger noch vor dem Haupt-Akku leergesaugt wird, habe ich mir mal folgendes Kraut-und-Rüben-Script geschrieben:

Code:
#!/bin/sh

# make sure to first discharge the main battery 
# if the secondary ultrabay battery is installed

SMAPIDIR=/sys/devices/platform/smapi

if [ ! -e $SMAPIDIR ]; then
    echo "No SMAPI support detected, nothing to be done"
    exit 1
elif [ "$(cat $SMAPIDIR/BAT1/installed)" != "1" ]; then
    echo "No Ultrabay battery present, nothing to be done"
    exit 1
fi

if [ "$(cat $SMAPIDIR/ac_connected)" != "1" ] && [ "$(cat $SMAPIDIR/BAT1/installed)" = "1" ]; then
    if [ "$(cat $SMAPIDIR/BAT0/installed)" = "1" ] && [ "$(cat $SMAPIDIR/BAT0/remaining_percent)" != "0" ]; then
        echo "Ultrabay battery present, switching battery discharge order"
        echo 1 > $SMAPIDIR/BAT0/force_discharge
    else
        [ "$(cat $SMAPIDIR/BAT0/installed)" != "1" ] || [ "$(cat $SMAPIDIR/BAT0/remaining_percent)" = "0" ] && echo "Main battery is absent or empty, running on Ultrabay battery"
    fi
elif [ "$(cat $SMAPIDIR/BAT0/installed)" = "1" ] && [ "$(cat $SMAPIDIR/BAT0/force_discharge)" = "1" ]; then
        echo "AC adapter is connected, disabling forced battery discharge behavior"
        echo 0 > $SMAPIDIR/BAT0/force_discharge
elif [ "$(cat $SMAPIDIR/ac_connected)" = "1" ] && [ "$(cat $SMAPIDIR/BAT1/installed)" = "1" ]; then
        echo "AC adapter is connected, forced battery discharge is disabled"
fi

Ich weiss, dass es etwas holprig geschrieben ist, aber meine Programmierkünste bewegen sich nunmal leider nur irgendwo zwischen "Nichtvorhanden" und "Selbstverteidigung". ;)

Hat TLP eventuell eine vergleichbare Funktion, welche dieses Script am besten gleich überflüssig machen würde? Bisher führe ich das bei Bedarf nur manuell aus, da ich mich noch nicht damit auseinandergesetzt habe, irgendeinen passenden Automatismus via udev und Konsorten ausfindig zu machen.
 
@nilfilter: So unterscheiden sich die Geschmäcker: Mich treibt jegliches voreingestellte bunte Syntax-Highlighting schier in den Wahnsinn, und deswegen ist es eines der ersten Dinge, die bei meinen Installationen abgeschaltet werden. Mich lenken diese zusätzlichen Farbhervorhebungen einfach viel zu sehr vom wesentlichen ab.
Und ich habe lange danach gesucht, weil das Wesentliche in dem Informationswust oft unterzugehen droht ;)
 
Zyklisches Schalten WiFi, Bluetooth, WWAN unter Debian

Ich hole den Thread mal wieder nach oben, weil ich ihn ziemlich interessant finde.

Das zyklische Durchschalten von WiFi, Bluetooth und WWAN wie unter Ubuntu wie die teils unter Ubuntu funktioniert (WiFi + Bluetooth) wird unter Debian nicht unterstützt. Ich meine zwar, dass ich dazu mal was am rande irgendwo hier gelesen zu haben, aber zumindest habe ich das nicht mehr gefunden. Ich brauche diesen zyklischen Umschalter zwar nicht zwingend, aber ich wollte mir halt doch einen schreiben.

Code:
#!/bin/bash
# Zum Ausführen des Scripts muss tlp installiert sein.

BT=$(bluetooth toogle)
WW=$(wwan toogle)
WI=$(wifi toogle)
BT0=$(echo "bluetooth = off (software)")
BT1=$(echo "bluetooth = on")
BTN=$(echo "bluetooth = none (no device)")
WW0=$(echo "wwan      = off (software)")
WW1=$(echo "wwan      = on")
WWN=$(echo "wwan      = none (no device)")
WI0=$(echo "wifi      = off (software)")
WI1=$(echo "wifi      = on")

if [[ "$WI" == "$WI1" ]] && [[ "$BT" == "$BT1" ]] && [[ "$WW" == "$WW1" || "$WWN" ]]
    then
        `sudo bluetooth off` && `sudo wwan off`

elif [[ "$WI" == "$WI1" ]] && [[ "$BT" == "$BTN" ]] && [[ "$WW" == "$WW1" ]]
    then
        `sudo wwan off`

elif [[ "$WI" == "$WI1" ]] && [[ "$BT" == "$BT0" ]] && [[ "$WW" == "$WW0" || "$WWN" ]]
    then
        `sudo wifi off` && `sudo bluetooth on`

elif [[ "$WI" == "$WI1" ]] && [[ "$BT" == "$BTN" ]] && [[ "$WW" == "$WW0" ]]
    then
        `sudo wifi off` && `sudo wwan on`

elif [[ "$WI" == "$WI0" ]] && [[ "$BT" == "$BT1" ]] && [[ "$WW" == "$WW0" || "$WWN" ]]
    then
        `sudo bluetooth off` && `sudo wwan on`

elif [[ "$WI" == "$WI0" ]] && [[ "$BT" == "$BT0" || "$BTN" ]] && [[ "$WW" == "$WW1" ]]
    then
        `sudo wwan off`
else
    `sudo wifi on`
    `sudo bluetooth on`
    `sudo wwan on`
fi

exit 0

Geht mit allen dreien, oder nur WiFi und WWAN oder nur WiFi und Bluetooth.

Grüße
 
Zuletzt bearbeitet:
Mir fällt eben noch das hier auf:
Code:
BT=$(bluetooth toogle)
WW=$(wwan toogle)
WI=$(wifi toogle)
Der Parameter zum Umschalten heißt nicht "toogle" sondern "toggle". Allerdings willst Du ja den Zustand nur anzeigen, also brauchst Du bluetooth/wifi/wwan ohne Parameter.
 
Bisher führe ich das bei Bedarf nur manuell aus, da ich mich noch nicht damit auseinandergesetzt habe, irgendeinen passenden Automatismus via udev und Konsorten ausfindig zu machen.
Habe das Ganze mittlerweile heftig überarbeitet und endlich auch mit udev verheiratet, da mir die ausschliesslich manuelle Handhabung nach einer Weile doch ziemlich auf den Strich ging.

Das Script zum Umschalten der Entladereihenfolge bei Einschub eines UltraBay-Akku habe ich zusammen mit ein paar weiteren Scripts zum Hotpluggen von UltraBay-Geräten zu einem kleinen Debian-Paket namens "ultrabay-scripts" geschnürt und hier verfügbar gemacht: sourceforge.net/projects/wmlive/files/ultrabay-scripts.

Code:
Description: Management of ThinkPad UltraBay devices and batteries
 Scripts to automatically dock/undock UltraBay devices of ThinkPads via
 udev rules. Also includes a script to switch discharge order to first
 drain the main battery in case an UltraBay battery has been inserted.

Bisher nur auf einem T61 und einem T60 getestet, also ohne jegliche Gewähr meinerseits, dass das auch auf anderen Thinkpads funktioniert. Für Testberichte und Verbesserungen wäre ich jedenfalls sehr verbunden.
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben