Eure Thinkpad-Tweaks?

mikar

Active member
Registriert
27 Jan. 2009
Beiträge
1.400
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
Interessant. Ich habe leider keine Tweaks mehr, weil ich alle schon in TLP verbaut habe :( . Allerdings wären 4. und 5. mögliche Kandidaten für TLP-Features :) .

ps. meine Mailanwort zu TLP@Arch ist noch in Arbeit.
 
[quote='mikar',index.php?page=Thread&postID=849824#post849824]
Falls ihr also auch so kleine Tweaks, Tricks oder einfach nur Workarounds habt, immer her damit ;).[/quote]

Na dann:

Akkuinfos:

Code:
 $ cat bin/bat
#!/bin/bash

echo -e ""
while sleep 1
do
	echo -e "\e[1A;\e[1A;"
	echo "`cat /sys/devices/platform/smapi/BAT0/power_now` mW  `cat /sys/devices/platform/smapi/BAT0/power_avg` mW  `cat /sys/devices/platform/smapi/BAT0/remaining_percent` %  `cat /sys/devices/platform/smapi/BAT0/remaining_running_time` min     	"
done

Code:
$ cat bin/batstat
#!/bin/bash

grep "" /sys/devices/platform/smapi/BAT0/*


Und ein bisschen Stromsparen, bringt das X31 auf ~ 8 Watt runter.

Code:
$ cat /etc/conf.d/local.start
#!/bin/bash
# /etc/conf.d/local.start

# This is a good place to load any misc programs
# on startup (use &>/dev/null to hide output)

rovclock -m 100 -c 100 >/dev/null
radeontool dac off

 iwpriv eth1 set_power 5
iwconfig eth1 power on

ethtool -s eth0 wol d

# hdparm -M 128 -B 1 -S 12 /dev/sda
# hdparm -M 128 -B 1 /dev/sda >/dev/null

echo 1500  >/proc/sys/vm/dirty_writeback_centisecs
echo 5 >/proc/sys/vm/laptop_mode

modprobe phc-intel
echo "14:33 12:30 10:23 8:18 6:9" |  tee  /sys/devices/system/cpu/cpu0/cpufreq/phc_controls >/dev/null

Und noch n paar Keybindings, um sich schnell an ändernde Ausgabegeräte(zusätzlicher Bildschirm im Dock, nur intern ohne Dock, nur extern am Fernseher) anpassen zu können. Und auch welche um die "Seite rechts/links" beim Steuerkreuz für Workspacewechsel nutzen zu können.

Gruß
 
@largi: welche Distri ist das denn? Das ist Arch, nicht? Das Powersave für ipw2100 geht wußte ich noch gar nicht.
 
[quote='linrunner',index.php?page=Thread&postID=849858#post849858]@largi: welche Distri ist das denn? Das ist Arch, nicht? Das Powersave für ipw2100 geht wußte ich noch gar nicht.[/quote]
Ist Gentoo :whistling:
 
Hab fast das wichtigste vergessen:
Aliase und Funktionen! :)

Code:
  # acpi
  alias bat="bat -b 0"
  alias bata="cat /proc/acpi/battery/BAT0/state"
  alias batc="bat | grep -A 4 'Battery charging control'"
  alias bath="bat | grep -A 4 'Battery health'"
  alias bats="bat | grep -A 6 'Battery status'"
  alias cdsmapi="cd /sys/devices/platform/smapi/BAT0"
  alias cdacpi="cd /sys/devices/platform/thinkpad_acpi"
  alias hell="cat /sys/class/backlight/acpi_video0/brightness"
  batsta() { echo $@ | sudo tee /sys/devices/platform/smapi/BAT0/start_charge_thresh }
  batsto() { echo $@ | sudo tee /sys/devices/platform/smapi/BAT0/stop_charge_thresh }
"bat" ist ein Skript, das tp-smapi-Infos abfragt: http://github.com/mikar/x200s/tree/master/scripts/bat

Code:
  fan() { # control fan
    fanfile=/proc/acpi/ibm/fan
    case "$1" in
       on|auto)
         echo level auto | sudo tee $fanfile
         ;;
       off|disable)
         echo disable | sudo tee $fanfile
         ;;
       '')
         cat $fanfile
	 ;;
       *)
         echo level $@ | sudo tee $fanfile
    esac
  }

Und ein paar Netzwerkaliase:
Code:
  # network
  alias rfkill="sudo rfkill"
  alias lsnet="ls /var/run/network/profiles"
  alias bon="echo 1 | sudo tee /sys/devices/platform/thinkpad_acpi/bluetooth_enable"
  alias boff="echo 0 | sudo tee /sys/devices/platform/thinkpad_acpi/bluetooth_enable"
  alias won="rfkill unblock wlan ; ifconfig wlan0 up"
  alias woff="rfkill block wlan"
  alias iwconfig="sudo iwconfig"
  alias iwpower="iwconfig wlan0 power"
  alias iwlist="sudo iwlist"
  alias iwscan="iwlist wlan0 scan | grep -B 3 ESSID"
  alias edwn="ifconfig eth0 down"
  alias eup="ifconfig eth0 up"
  alias wdwn="ifconfig wlan0 down"
  alias wup="ifconfig wlan0 up"
  alias iwconfig="sudo iwconfig"
  alias iwpower="iwconfig wlan0 power"
  alias iwlist="sudo iwlist"
  alias wcc="wicd-curses"                               # wicd
  alias wtog="sudo wtog"				# toggle wlan (FN+F5)

Inzwischen sind die in meinem acpi-handler gelandet, aber hier habe ich noch zwei Bashskripte, mit denen man BT bzw. WLAN togglen kann:
BT:
Code:
bt=/sys/devices/platform/thinkpad_acpi/bluetooth_enable
btcat=$(cat $bt)
case "$btcat" in
  1)
    echo 0 > $bt
  ;;
  0)
    echo 1 > $bt
  ;;
esac
Code:
wlan=`ifconfig | grep wlan0 | wc -l`
profile=$(echo `ls /var/run/network/profiles`)
case "$wlan" in
  1)
    ifconfig wlan0 down
  ;;
  0)
    ifconfig wlan0 up
    #netcfg down $profile 2>/dev/null
    #netcfg $profile 2>/dev/null
  ;;
esac

Ich benutze ZSH statt bash. Wen meine .zshrc interessiert: http://github.com/mikar/config/blob/master/.zshrc. Ist ein ziemliches Monstrum geworden :love:.

Grüße,
mikar
 
Apropos vergessen: Lüftersteuerung:

Code:
$ cat bin/setfan 
#!/bin/sh

case $1 in
	a)		echo level "auto" | sudo tee /proc/acpi/ibm/fan;;
	d)		echo level "disengaged" | sudo tee /proc/acpi/ibm/fan;;
	*)		echo level "$1" | sudo tee /proc/acpi/ibm/fan;;
esac

Ich gebe zu, dass ich die noch verbessern sollte. Bisher aber problemlos, man muss nur aufpassen, was man macht :)

Gruß
 
Heute sind nochmal zwei Skripte zum Ab- und Andocken dazugekommen:

handler.sh
dock
undock

Um nach "undock" wieder "dock"en zu können, muss man allerdings das TP einmal aus der Dock nehmen und wieder reinsetzen, da die Stromzufuhr abgeschaltet wird.
Wie regelt ihr das denn mit dem An- und Abdocken unter Linux?


[quote='largi',index.php?page=Thread&postID=849855#post849855]
Akkuinfos:
Code:
[...]
[/quote]
Akkuinfos mit echoparm aus TLP (von linrunner).

Grüße,
mikar
 
[quote='mikar',index.php?page=Thread&postID=853203#post853203]
Akkuinfos mit echoparm aus TLP (von linrunner).[/quote]
Aye, ich gebe zu: Meines ist nur schnell - aber nicht liebelos - zusammengehackt ;)
[quote='mikar',index.php?page=Thread&postID=853203#post853203]Wie regelt ihr das denn mit dem An- und Abdocken unter Linux?[/quote]
Gar nicht. Bis auf erwähnte xrandr-Shortcuts.

Gruß
 
Hey,

bei mir steht das acpi event "ibm/hotkey HKEY 00000080 00006030" für sowohl An- als auch Abdocken.
Dank folgendem Abschnitt in der handler.sh wird jetzt beim Andocken jedesmal das Docking-Skript, also Monitor wechseln, Festplatte mounten, Netzwerk- und Conkyprofil wechseln (u.a.), durchgeführt.
Docking klappt jetzt besser als in Windows :):

Code:
set $*

case "$1" in
    [...]
    ibm/hotkey)
	case "$4" in
            [...]
	    *6030) # docked/undocked
		   if [ $DOCKED = 1 ];then
		     logger "acpid: docked, executing docking script"
		     dock
		   else
		     logger "acpid: not docked, $action has no effect"
		   fi;;
            [...]
	esac;;
    *)   logger "acpid: $event undefined";;
esac

Außerdem 'ne überarbeitete Funktion, um start und stop_charge_thresh zu setzen, auch mit linrunners echoparm:
Code:
export bat=/sys/devices/platform/smapi/BAT0
echoparm() { # $1: file, $2: n/a message, $3: unit, $4: cutoff
	local val
	
	if [ -f $1 ]; then
		val=`cat $1`
		if [ -n "$4" ]; then
			val=${val%$4}
		fi
		if [ -n "$3" ]; then	
			echo "$1 = $val [$3]"
		else
			echo "$1 = $val"
		fi
	else
		if [ -n "$2" ]; then
			echo "$1 = ($2)"
		else
			echo "$1 = (n/a)"
		fi
	fi
}
batset() {
if [ $# = 0 ];then
  echoparm $bat/start_charge_thresh
  echoparm $bat/stop_charge_thresh
  echo "Usage: batset <start_charge_thresh> <stop_charge_thresh>"
else
  echo $1 | sudo tee $bat/start_charge_thresh
  echo $2 | sudo tee $bat/stop_charge_thresh
fi
}

Grüße,
mikar
 
[quote='mikar',index.php?page=Thread&postID=853203#post853203]Wie regelt ihr das denn mit dem An- und Abdocken unter Linux?
[/quote]Bis auf die Bildschirmumschaltung macht Ubuntu alles ootb.
 
Was heißt denn alles?
Es ging mir mehr um die kleinen, individuellen Dinge oder vollautomatische Lösungen.
Die normale Hardwareinitialisierung kann ja jede aktuelle Distribution und eine Art automount ist bei den meisten auch dabei.
 
"Alles" heißt: alles was ich brauche. Mir reicht ootb. War das jetzt keine gültige Antwort auf deine ursprüngliche Frage "wie macht ihr das ..." ? ?(
 
ganz wichtig:

firefox:
- mit einem klick die url in der adressleiste markieren
- Backspace blättert eine Seite zurück

beides unter about:config mit jeweiligem suchbegriff "single click" und "backspace" zu finden
 
/etc/acpi/handler.sh
Code:
	    *7000) # RFKILL-Switch
		   if [ $(rfkill list | grep 'Hard blocked: yes' | wc -l) = 0 ];then
		       rfkill block bluetooth
		       case $NETPROFILE in
		           home);;
		           '')		    netcfg bett;;
                           *)		    netcfg all-resume;;
		       esac
		   else
		       case $NETPROFILE in
		           home);;
                           *)		    netcfg all-suspend;;
		       esac
		   fi;;

Wenn ich den RFKILL-Switch umgelegt habe, wurde bisher immer Bluetooth aktiviert und WLAN blieb aus. Der Abschnitt sorgt für das Gegenteil und verbindet mich dann mit einem Profil meiner Wahl, es sei denn, ich bin bereits übers Ethernet verbunden. Klappt aber nur, wenn rfkill und netcfg :love: verwendet werden.

Außerdem noch ein Skript, dass die Helligkeit setzt:
http://github.com/mikar/config/tree/master/.bin/hell

hell +/-/min/max oder ganz einfach mit hell 0-15

Außerdem benutze ich "hell+" und "hell-", die alle 0.5 Sekunden die Helligkeit um eins erhöhen/verringern und bei Input von strg+c die aktuelle Helligkeit ausgeben.
Code:
  alias hell="sudo hell"
trapped() {
  echo -en "\nHelligkeit: $(cat $bright)\n"
}
hell+() {
trap "trapped && return 0" SIGINT
  while true; do sleep .5 && sudo hell +; done
}
hell-() {
  trap "trapped && return 0" SIGINT
  while true; do sleep .5 && sudo hell -; done
}

Außerdem nicht thinkpad-spezifisch, aber ein trotzdem sehr nützliches Skript für die Arch-User unter uns names "updatehosts" (von prisbin aus dem Arch-Forum):
http://github.com/mikar/config/tree/master/.bin/updatehosts
Grüße,
mikar

// Heute bin ich über folgendes Video gestolpert: [youtube]Sim_7IkEo0g[/youtube]
Auf thinkwiki gibt's einen Artikel samt Skript dazu: http://www.thinkwiki.org/wiki/Script_for_theft_alarm_using_HDAPS

Ich musste das Skript ein wenig ändern, dass es funktioniert: http://github.com/mikar/x200s/blob/master/scripts/theft
Man braucht "sox".
Meinem /etc/acpi/handler.sh habe ich folgendes hinzugefügt:
Code:
USERHOME=/home/mikar
export DISPLAY=":0"
THEFT=$(pgrep theft)
THEFTMODULE=$(lsmod | grep hdaps)
EVENT=$1\ $2\ $3\ $4

case "$EVENT" in
    ibm*1002)	# FN+F2
		xset dpms force off
		[ -z $THEFTMODULE ] && modprobe hdaps && sleep 1
		theft &
		su -c slock $USER
		killall theft;;
    ibm*1009)	# FN+F9
		if [ -z $THEFT ];then
		  [ -z $THEFTMODULE ] && modprobe hdaps && sleep 1
		  theft &
		else
		  kill $THEFT
		fi;;
    *)		logger "$EVENT undefined";;
esac
Fn+F2 schaltet das Display aus und aktiviert slock und das Theft-Skript. Erst wenn das Passwort für slock richtig eingegeben wurde, wird das Antitheft-Skript deaktiviert.
Mit Fn+F9 kann man das Theft-Skript togglen.

Falls das HDAPS-Modul in einem der Fälle nicht geladen ist, wird es geladen, bevor theft ausgelöst wird.

---
Außerdem habe ich ein sehr praktisches Openbox-Pipe-Menü für Netcfg gefunden: http://github.com/mikar/x200s/blob/master/scripts/wifi-pipe
# required:
# netcfg
# zenity
# NOPASSWD entries for this and netcfg through visudo
#
# the following in menu.xml:
# <menu id="pipe-wifi" label="Wifi" execute="sudo /path/to/wifi.pipe interface"/>

Das sieht dann so aus:

Verbinden kann man sich natürlich auch gleich.

Grüße,
mikar
 
Die Skipte sind leider offline. Ich möchte mir ein Skript schreiben, das beim Systemstart prüft, ob mein TP im Dock ist, wenn ja soll folgendes ausgeführt werden:
Code:
xrandr --output DVI1 --auto --primary --left-of LVDS1 --output LVDS1 --auto

Ich habe leider keine Ahnung, wie ich im Skript abfragen kann, ob das TP im Dock ist oder nicht...vielleicht kann mir da jemand nen heißen Tipp geben? ;)
 
Ich hatte die Pfade geändert, jetzt stimmt es wieder.
Du kannst folgendes benutzen:
Code:
if [[ $(cat /sys/devices/platform/dock.0/docked) = 1 ]];then
  xrandr --output DVI1 --auto --primary --left-of LVDS1 --output LVDS1 --auto
fi
Der Abschnitt muss allerdings ausgeführt werden, wenn der X-Server gestartet ist.
Ein geeigneter Ort wäre ~/.xinitrc.
Du kannst den Abschnitt aber auch in die rc.local stecken, wenn du

a) sleep vor xrandr setzt
Code:
DOCKED=$(cat /sys/devices/platform/dock.0/docked)
if [[  $DOCKED = 1 ]];then
   sleep 3 && xrandr --output DVI1 --auto --primary --left-of LVDS1 --output LVDS1 --auto
fi
b) eine Schleife einbaust, die testet, ob der xorg-server schon gestartet ist:
Code:
DOCKED=$(cat /sys/devices/platform/dock.0/docked)
XORG=$(pgrep 'X')
if [[ $DOCKED = 1 ]];then
   until [[ ! -z $XORG ]];do
     sleep 1 && xrandr --output DVI1 --auto --primary --left-of LVDS1 --output LVDS1 --auto
   done
fi
c) xrandr z.B. 10 Sekunden lang jede Sekunde testen lässt:
Code:
#!/bin/bash
#

DOCKED=$(cat /sys/devices/platform/dock.0/docked)
XORG="pgrep 'X'"
if [[ $DOCKED = 1 ]];then
  for ((i=0; i<=10; i++));do
    sleep 1
    if [[ ! -z $(eval $XORG) ]]; then
      xrandr --output DVI1 --auto --primary --left-of LVDS1 --output LVDS1 --auto
      break
    fi
  done
fi

Mein bash ist dürftig, o.g. sollte aber hoffentlich funktionieren.
Wenn du das direkt in der rc.local oder .xinitrc einsetzt, ist es wohl besser, wenn du das ganze einklammerst und mit nem Ampersand versiehst, damit der Bootvorgang dadurch nicht verzögert wird:
(DOCKED ...
[...]
fi) &

Grüße,
mikar
 
An- und Abdocken

Hallo zusammen,

ich habe heute einige Stunden daran gearbeitet, das An- und Abdocken auf meinem X201 unter Ubuntu zu automatisieren. Leider bin ich dabei auf einige Probleme gestoßen, die ihr aber wahrscheinlich mit links lösen könnt :).

1. Mein größtes Problem: Wenn ich meinen laufenden Rechner abdocke (also den Knopf an der Ultrabase drücke), wird meine UltraBase-HDD nicht ungemountet! Da sie sich natürlich auch nach dem Abdocken nicht mehr unmounten lässt, ist das ganze sehr unangenehm (und schlecht für die Daten sicherlich auch <g>). Meine Frage lautet daher: Wo kann ich das Abdock-Event abfangen? Das einzige, was ich bei mir gefunden habe, ist /etc/acpi/undock.sh. Wenn ich dieses Skript um den entsprechenden umount-Aufruf ergänze, hat das aber leider keine Wirkung :-(.

2. Das analoge Problem beim Andocken: Hier würde ich gerne meine HDD mounten und den externen Monitor einschalten. Wo kann ich dieses Event abfangen? Eine Datei /etc/acpi/dock.sh o.ä.gibt es bei mir nicht.

Ich nehme natürlich an, dass hier der handler-Ansatz von mikar weiterhelfen wird, aber wie bringe ich meinem System bei, /etc/acpi/handler.sh aufzurufen?


Vielen Dank schon mal im Voraus für eure Ratschläge,

morger
 
Hi,

hier hat kürzlich jemand eine ähnliche Frage gestellt. udev-Skripte für die Ultrabay, die Du modifizieren könntest findest Du hier.

ps. und laß bitte einen Mod einen extra Thread aus deinem Thema machen. Hier gehören fertige Lösungen rein.
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben