owagott
Anmeldungsdatum: 16. September 2006
Beiträge: 35
|
Hab hier gelesen das man die Tastaturbeleuchtung ansteuern kann. http://www.thinkwiki.org/wiki/Table_of_thinkpad-acpi_LEDs
https://thinkpad-forum.de/threads/117251-Keine-Berechtigung-f%c3%bcr-proc-acpi-ibm und hätte gerne eine kleines Script was dies für mich macht: | #!/bin/sh
t_an=1800
t_aus=0600
while [ $(date +%H%M) -ne $t_an ]; do
sleep 55
done
echo "on" > /proc/acpi/ibm/light
while [ $(date +%H%M) -ne $t_aus ]; do
sleep 55
done
echo "aus" > /proc/acpi/ibm/light
|
Funktioniert Gut...nur nicht zuverlässig, wenn ich in aus dem Ruhezustand oder Standby komme. daher die Frage, wie und wo muss das heißen, wenn nicht im crontab um mittagszeit Gruß Moderiert von Taomon: Eher Skript-Frage, daher verschoben.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12821
|
Ich würde das vom Ansatz her anders machen: ich würde auf die aktuelle Zeit schauen und basierend darauf, ob ich in dem Hell-Intervall oder dem Dunkel-Intervall bin den Befehl schicken. Wenn Du das ganze dann noch als Cronjob ein mal pro Stunde startest, muss der Prozess nicht die ganze Zeit laufen. Also | #!/bin/sh
now=$(date +%H)
if [ $now -ge 18 -o $now -lt 6 ]; then
echo on
else
echo aus
fi > /proc/acpi/ibm/light
|
Dann richtest Du das als Cronjob ein, der immer 1 Minute nach der vollen Stunde oder auch häufiger (z.B. alle 10 Minuten) läuft.
|
owagott
(Themenstarter)
Anmeldungsdatum: 16. September 2006
Beiträge: 35
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Oder ohne Script mit zwei Cronjobs. Einen zur Einschaltzeit, einen zur Ausschaltzeit ☺
Zu umständlich mit der Prüfung und anacron.
|
TNTMaster
Anmeldungsdatum: 30. Juli 2009
Beiträge: 851
|
Wenn du einen Lichtsensor verbaut hast, könntest du die Beleuchtung abhängig von der Umgebungshelligkeit steuern. Kommt mit diesem Befehl eine Ausgabe, hast du einen, die Zahl am Anfang zeigt dabei den Wert an.
for i in /sys/bus/iio/devices/iio\:device*/in_intensity_both_raw; do if [ -f "$i" ]; then echo "$(<"$i") $i"; fi; done TNT
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12821
|
ChickenLipsRfun2eat schrieb: Oder ohne Script mit zwei Cronjobs. Einen zur Einschaltzeit, einen zur Ausschaltzeit ☺
Das ist vor allem nicht robust. Es war ja die Rede davon, dass der Rechner auch mal schläft. Wenn er den Änderungszeitpunkt verschlafen hat, klappt es halt nicht. Da würde ich dann mein Skript mit einem Interval von 10 oder 5 Minuten per cron laufen lassen.
Zu umständlich mit der Prüfung und anacron.
Wie bitte?
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Naja, das ganze nur per cron umsetzen wäre zu umständlich. Braucht dann ja noch eine Zeile für @reboot und dann ist die Frage, wie das mit suspend, etc. umgesetzt wird. Daher hatte ich das wieder durchgestrichen. systemd/Timer Units wäre noch interessant.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12821
|
ChickenLipsRfun2eat schrieb: Naja, das ganze nur per cron umsetzen wäre zu umständlich. Braucht dann ja noch eine Zeile für @reboot und dann ist die Frage, wie das mit suspend, etc. umgesetzt wird. Daher hatte ich das wieder durchgestrichen.
Das ist überhaupt nicht umständlich. Du lässt das Skript, das ich hier geteilt habe einfach alle fünf Minuten oder sogar jede Minute laufen und alles funktioniert. Ganz einfach. Was soll da kompliziert sein?
systemd/Timer Units wäre noch interessant.
Ja, ist aber auch nur ein anderer Mechanismus, um so ein Skript zu starten. Kompliziert wird es m.E. erst, wenn man versucht das so ereignisgesteuert zu machen, dass nur immer dann eine Änderung gemacht wird, wenn sich der Zustand ändert, d.h. wenn die Zeit wechselst oder der Recher aufgeweckt wird. Obwohl, das ist vielleicht auch gar nicht so schwer. Das Skript als Cronjob 1 Minute nach den jeweiligen Umschaltzeiten laufen lassen (also zwei mal am Tag) und dann noch beim Boot und wenn der Rechner aufwacht (das geht doch bestimmt mit systemd, oder?).
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Meine Anmerkung zu cron bezog sich auf meine Idee das "scriptfrei" zu machen, nicht generell gegen die cron-Nutzung. Mit dem systemd kann man diese Events abfangen, ja. Für das Vorhaben wäre das aber wirklich etwas überdimensioniert.
|
owagott
(Themenstarter)
Anmeldungsdatum: 16. September 2006
Beiträge: 35
|
Also ich hab das Script im Crontab laufen mit
*/10 * * * * licht Funktioniert sehr gut, vor allem wenn man das echo aus in echo off ändert.
Hab das Ausschalten nicht gebraucht, daher ist es mir noch nicht aufgefallen. Bin noch am überlegen wie man das noch verbessern kann, evtl. ist 18 Uhr im Sommer bissl doof mit licht an, usw. Gruß
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Du könntest das vielleicht an redshift oder ähnliches Koppeln.
|
owagott
(Themenstarter)
Anmeldungsdatum: 16. September 2006
Beiträge: 35
|
Danke, das ist ja mal toll. Redshift kannte ich noch nicht. Hab an sowas gedacht
https://www.anginf.de/?p=138 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 | #!/bin/bash
# Unsere Position
posLaenge="10.0"
posBreite="51.0"
# Notwendige Vorberechnungen
zoneinfo=$(date +%z) # Zeitzone
T=`date +%j` # Tag im Jahr
pi="3.14159265358979323844" # pi=`echo "4*a(1)" | bc -l`
rad=$(echo "${pi}/180" | bc -l)
h=$(echo "-(5/6)*(${rad})" | bc -l) # Höhe des Sonnenmittelpunkts bei Aufgang: Radius+Refraktion
BreiteRAD=$(echo "${posBreite}*${rad}" | bc -l)
# Welcher Tag ist heute?
#echo "Heute ist $(date +%d.%m.%y), der $(date +%j). Tag im Jahr"
#echo -n "Wir nutzen die Zeitzone $(date +%Z), dies entspricht $(date +%z) und damit "
#echo "${zoneinfo:0:3}"
sonnendekl=`echo "0.409526325277017*s(0.0169060504029192*(${T}-80.0856919827619))" | bc -l`
sonnendeklDEG=$(echo "${sonnendekl} / ${rad}" | bc -l)
arccosint=$(echo "(s(${h})-s(${BreiteRAD})*s(${sonnendekl}))/(c(${BreiteRAD})*c(${sonnendekl}))" | bc -l)
arccosintsign=${arccosint:0:1}
if [ ${arccosintsign} == "-" ]; then
usesign="+"
else
usesign="-"
fi
arc2cosint=$(echo "(${arccosint}) * (${arccosint})" | bc -l)
acoszeit=$(echo "${pi}/2 ${usesign} a(sqrt(${arc2cosint} / (1 - (${arc2cosint}) ) ) ) " | bc -l)
zeitdiff=$(echo "12*${acoszeit}/${pi}" | bc -l) # KORREKT!
zeitgleich=$(echo "-0.170869921174742*s(0.0336997028793971 * ${T} + 0.465419984181394) - 0.129890681040717*s(0.0178674832556871*${T} - 0.167936777524864)" | bc -l)
aufgang=$(echo "12-(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l)
untergang=$(echo "12+(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l)
if [ ${aufgang:1:1} == "." ]; then
# Ist ein einstelliges Ergebnis der Form x.xxxx, wir brauchen noch eine 0 vorne
aufgang=$(echo 0${aufgang})
fi
# Fuer unsere Breitengrade ueberfluessig, nur der Vollstaendigkeit halber:
#if [ ${untergang:1:1} == "." ]; then
# Ist ein einstelliges Ergebnis der Form x.xxxx, wir brauchen noch eine 0 vorne
# untergang=$(echo 0${untergang})
#fi
# Umrechnung in Stunden (trivial) und Minuten (runden!)
AufgangMinute=$(echo "(${aufgang} - ${aufgang:0:2}) * 60" | bc | xargs printf "%02.0f\n")
if [ ${AufgangMinute} == "60" ]; then
AufgangMinute="00"
AufgangStunde=$(echo "${aufgang:0:2} + 1" | bc | xargs printf "%02.0f")
else
AufgangStunde=${aufgang:0:2}
fi
#echo "Aufgang (hh:mm): ${AufgangStunde}:${AufgangMinute}" # Immer ein zweistelliges Ergebnis
UntergangMinute=$(echo "(${untergang} - ${untergang:0:2}) * 60" | bc | xargs printf "%02.0f\n")
if [ ${UntergangMinute} == "60" ]; then
UntergangMinute="00"
UntergangStunde=$(echo "${untergang:0:2} + 1" | bc | xargs printf "%02.0f")
else
UntergangStunde=${untergang:0:2}
fi
#echo "Untergang (hh:mm): ${UntergangStunde}:${UntergangMinute}" # Immer ein zweistelliges Ergebnis
#Blinken zur vollen Stunde
now=$(date +%M)
if [ $now -eq 0 ]; then
echo off > /proc/acpi/ibm/light
sleep 0.3
echo on > /proc/acpi/ibm/light
sleep 0.3
echo off > /proc/acpi/ibm/light
sleep 0.3
echo on > /proc/acpi/ibm/light
sleep 0.3
echo off > /proc/acpi/ibm/light
fi
#Licht an aus nach dem Sonnenlauf
now=$(date +%H)
if [ $now -ge $UntergangStunde -o $now -lt $AufgangStunde ]; then
echo on
else
echo off
fi > /proc/acpi/ibm/light
|
die Koordinaten kann man mit http://www.gpskoordinaten.de/ auswählen
|