Monitor bekapcsolása eseménynél mi történik pontosan?

Fórum: 

Mi tortenik akkor a rendszeren belul amikor a monitor visszater alvasbol? Lehet ezt detektalni, ha igen akkor hogyan?
Tehat nem piszkalom az egeret, se a billt, magara hagyom a gepet, a monitor a beallitott pl. 15 perc utan elmegy sleepbe, azaz bekövetkezik a "Kijelző kikapcsolása".
Megmozditom az egeret, a monitor visszakapcsol, ébred, es EZT a muveletet hogyan lehetne elcsipni es ezutan az alabbi parancsot lefuttatni? Vagyis akarhanyszor ha visszakapcsol a monitor, fusson le ez:

pactl set-card-profile 0 output:hdmi-stereo

elvileg próba csersznye...

Elvileg KDE alatt a valahol nem tudom hol, de angolul Personalization>Notifications>Notifications>Screensaver
alatt lehet pl. üzeneteket megjeleníteni, vagy parancsokat megadni, de pontosan nem tudom, mert nem használok KDE-t. Illetve lehet egy ilyesmi szkripptel próbálkozni:

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
  while read x; do
    case "$x" in
      *"boolean true"*) <Parancs ha fut a képernyővédő>;;
      *"boolean false"*) pactl set-card-profile 0 output:hdmi-stereo;;
    esac
  done

egyes rendszereken a monitor vezérlő parancsok többször is lefutnek egymás után, ez 5 másodperces intervallumokban csak 1x működik:

#!/bin/bash

screen_locked () {
    if [[ $firstrun == '' ]] || [[ $(expr $(date +%s) - $firstrun) -ge 5 ]]
    then
        screen_locked_core;
        firstrun=$(date +%s);
    fi
}

screen_locked_core () {
    echo locked
}

dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
while read x; do
    case "$x" in
        *"boolean true"*) <Parancs ha fut a képernyővédő>;;
#       *"boolean false"*) pactl set-card-profile 0 output:hdmi-stereo;; 
    esac
done

 

Értékelés: 

0
Még nincs értékelve

elvileg próba csersznye...

#1 A "ScreenSaver" az a képernyővédő? Ami mindenféle mintákat rajzol a képernyőre? Ha igen, akkor nem jó, én azt nem használom hanem 10 perc tétlenség után kikapcsol a monitor.
https://mega.nz/file/xph10QKI#85RNxyg163u7T_1mnYx6z8stXqAATFohxmVguGnyhvw
Itt valóban van egy lehetőség, hogy bizonyos eseménynél egy kiválasztott parancs lefusson, ezt egy másik lapon lehet beállítani de akkor fut le ha KIkapcsol a monitor. Én meg azt a valamit keresném amikor a rendszer BEkapcsolja.

Az a baj hogy egyáltalán gőzöm sincs, angolul hogyan is keressek erre, nem hnném hogy olyan gyakori kérdés ez hogy találatok ezreit hozná a kereső.

Értékelés: 

0
Még nincs értékelve

Xubuntu

Ha a nálad lévő rendszer egy Xubuntura telepitett Plasma, akkor elvileg ott az energiagazdálkodást az xfce4-power-manager végzi. Meg kellene nézni, hogy tényleg ő vagy esetleg valami más.

Értékelés: 

0
Még nincs értékelve

elvileg próba csersznye...

#2 Uhm, férleértetelk, bocs. Gondokodom a te eseteden, de koppan le a szemem, és annyira ásítozom, majd befalom a monitort. Most nem megyon a gondolkodás. Systemd init-re lehet még alapozni,ha jól tudom, a Xubuntu alatt ez van, de lehet, hogy tévedek.

van /usr/lib/systemd/ mappa? ez alatt létre kell hozni egy system-sleep nevű mappát.

ebbe beletenni egy skriptet, ami belül vahogy így néz ki:

#!/bin/bash
if [ "${1}" == "pre" ]; then
   # <parancs elalvás előtt>
elif [ "${1}" == "post" ]; then
   pactl set-card-profile 0 output:hdmi-stereo
fi

 

Értékelés: 

0
Még nincs értékelve

vagy...

#2 Másik lehetőség a pm-utils, ennek a mappája /usr/lib/pm-utils/sleep.d

ebben a mappában van egy csomó elő gyártott skript, pl. van a 95led, aminek a feladata villogtatni a monitor led-jét, amikor alszik. Ezt mintának veheted, új szkriptet kell írni ebből kiindulva, ami kb. így néz ki:

#!/bin/sh
[ -f /proc/acpi/ibm/led ] || exit $NA

case "$1" in
    hibernate|suspend)
       # echo "7 blink" >/proc/acpi/ibm/led
        ;;
    thaw|resume)
       pactl set-card-profile 0 output:hdmi-stereo
        ;;
    *) exit $NA
        ;;
esac

exit 0

ezt el kell menteni, úgy, hogy szám (96-99) legyen a fájlnév eleje, itt a szám azt jelenti, hogy hányadikként lesz lefuttatva, próba, cseresznye...

Értékelés: 

0
Még nincs értékelve

Xubuntu

#3 Ezt hogyan tudom megnézni?

Valamelyik logfájlba nem mentődik, mi történik akkor amikor visszakapcsolja a monitort?
Ez nem lehetne esetleg kiindulásnak jó valamire?

Értékelés: 

0
Még nincs értékelve

vagy...

#5 Aztaa, mik vannak, eről  ledvillogtatásról pl. fogalmam sem volt.

Az hogyan történik amikor alvóba küldi a monitort?
Elveszi a háttérvilágítást, nullára, vagy a videokártyával csinál valamit, ez is igen érdekes téma. Legalábbis nekem.

Értékelés: 

0
Még nincs értékelve

Xubuntu

#6 Ezt hogyan tudom megnézni? Terminálba: xfce4-power-manager-settings

Értékelés: 

0
Még nincs értékelve

Xubuntu

#8 Erre a válasz:

Az xfxe power manager nem fut. Elindítja most?

Én a Nem-re nyomtam.
Akkor a KDE manager fut gondolom..?

Mégegy. Van egy parancsikonom ami a 
 

#!/bin/bash
sleep 2 && xset dpms force off

szkriptre mutat, erre kapcsolva kikapcsol a monitor. Sokszor használom, ha tudom hogy hoszabb időre magára hagyom a gépet.
Utána néztem ennek a DPMS-nek de nem lettem okosabb sajnos.
Ezt nem lehet figyelni, mit csinál ez? 

Értékelés: 

0
Még nincs értékelve

Monitor bekapcsolása eseménynél mi történik pontosan?

Csak feltételezem hogy minderre azért lenne szükséged, mert alvásból visszatérés után
nincs hang - és ezzel a paranccsal hoznád vissza.
Ismered a megfelelő parancsot - nem lenne megoldás az ha csinálnál vele és egy a net.-ről
letöltött HDMI ikonnal egy indítót ? Ez ugyan nem hozná vissza automatikusan a hangot,
de egy kattintás elég lenne hozzá.

Értékelés: 

0
Még nincs értékelve

vagy...

#7 Az hogyan történik amikor alvóba küldi a monitort?
Elveszi a háttérvilágítást, nullára, vagy a videokártyával csinál valamit, ez is igen érdekes téma. Legalábbis nekem.

A lényeg, hogy vannak API-k. (Application Program Interface). Ezek rendszerenként eltérőek lehetnek, de van lehetőség lekérdezni, hogy mik állnak rendelkezésre. Az API-kat használva lehet lekérdezni, vezérelni. Ezt az oprendszer, driverek, programok végzik. A fent említett szkriptet meghívja a pm-utils, az lekérdezi a paraméterben átadott API állapotát, ha abban szerepel a "Hibernate" vagy "Suspend", akkor küld egy jelzést az ACPI processnek (annak az API-jára), hogy villogtassa a LED-et.

Értékelés: 

0
Még nincs értékelve

Monitor bekapcsolása eseménynél mi történik pontosan?

#11 Jelenleg pontosan így működik, ikon a panelen.
Csak, hogyismondjam, a szórakozós munkahelyi gépre sikerült egy Kubuntut feltennem, és eddig még nem söpört el a népharag, több évtizedes  Wines múlttal rendelkező kollégáim egészen pozitív visszajelzésekett adtak és használják.
És van akinek ezt az egy kattintást is nehéz megmagyarázni. 
Érdekes hogy ez egy teljesen más pc mint az enyém, mégis 10-ből 1x jelentkezik ugyanaz a hiba mint az enyémen.
Monitor visszajövet nem áll vissza hdmi-re a hang. Ezért keresgélek ezen a vonalon.
Nem nagy dolog de ugye a kihívás.. laugh

Amúgy láthatjátok hogy jó ideje semmi komoly nyavajgásom nincs pedig már 3 pc-n fut közvetlen közelembe az Ubi.
Ez a poszt is inkább unaloműzésből és némi agytréning miatt született.

 

Értékelés: 

0
Még nincs értékelve

Monitor bekapcsolása eseménynél mi történik pontosan?

#13 Aha. Ez másik gép, semmiféle Xubuntu.

Értékelés: 

0
Még nincs értékelve

Monitor bekapcsolása eseménynél mi történik pontosan?

#14 Pontosan így van, 
másik gép és Kubuntu, KDE felülettel telepítve.
Az én gépem meg először Xubuntu volt, és arra tettem a komplett KDE Plasmát.
Vagyis akkor ez KXubuntu mert tudok választani hogy XFCE vagy KDE felülettel induljon.
 

Értékelés: 

0
Még nincs értékelve

Monitor bekapcsolása eseménynél mi történik pontosan?

#15 Lehet nem jó úton járok,
addig eljutottam hogy a képernyő (monitor) állapotát így le lehet kérdezni:

tibi@TibiXubuntu:~$ xset -q |grep  Monitor
Monitor is On
tibi@TibiXubuntu:~$ sleep 10 ; xset -q |grep  Monitor
Monitor is Off
tibi@TibiXubuntu:~$

A sleep 10 azért hogy az enter lenyomása után el tudjam küldeni a monitort alvóba az xset dpms force off paranccsal.
És jól működik mert a sleep utáni grep kimenetbe ott a Monitor is Off.
Ezt lefuttatgatva mondjuk 10 másodpercenként, ha a kimenet Off akkor értelemszerűen semmit nem kell csinálni, de ha átvált ON-ba, akkor egyszer le kéne futni a  pactl set-card-profile 0 output:hdmi-stereo  parancsnak.
De csak 1x, és utána nyugalom, a következő Off-On váltásig.

Egyáltalán jó az elképzelésem, ha igen akkor viszont ennek a kivitelezése meghaladja a képességeimet.

Szerintem T.István is valami ilyesmi  szkriptet csinált nekem csak az meg méginkább kínaiul van számomra.

Értékelés: 

0
Még nincs értékelve

Megoldva

Nem saját fejből mert az nem ment, külső segítséggel elkészült a kis szkript ami a monitor ébredése után automatikusan visszakapcsolja a hdmi audiót.

#! /bin/bash
function wait
{
    sleep 10
}
function monitor
{
    xset q | grep -q  "Monitor is On"
}
while true
do
    while monitor
    do
        wait
    done
    while ! monitor
    do
        wait
    done
    pactl set-card-profile 0 output:hdmi-stereo
done

Ha valaki esetleg segítene értelmezni, hogyan is működik, azt nagyon megköszönném.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#17 Mármint, úgy „automatikusan”, ha megnyomsz egy elemet?
Vagy esetleg a crontab futtatja időközönként?

István nem mondta el, hogyan működik?
A wait és a monitor kifejezések a változók, behelyettesíthetőek később bárhova.
Amikor igaz (true) az xset kimenet, be lesz kapcsolva a HDMI stereo profil.

Értékelés: 

0
Még nincs értékelve

Megoldva

#18 István elkezdett magyarázni de tudod hogy erősen vannak korlátaim, azaz semmit nem értettem belőle, és Ő is azt írta hogy próba-cseresznye, azaz vagy működne vagy nem, és én meg a szkriptekkel kísérletezés napokig? nem menne,  tudod hamar elfogy az erő belőlem. 
Ezért feldobtam egy speciálisan szkriptekkel foglalkozó helyre a problémámat, szerencsére nem hajtottak el mint lámát és ott kaptam ezt a szkriptet. És működik.
Nem kell crontab mert ha 1x elindítom, akkor folyamatosan fut, ezt a feladatkezelőbe látom.
Halványan azt sejtem hogy 10 másodpercenként kekérdezi hogy a monitor épp on vagy off, és ez alapján fut le a végén lévő parancs minden monitor ébredésnél.
 

Értékelés: 

0
Még nincs értékelve

Megoldva

#17 akkor megpróbálom elmagyarázni:

#! /bin/bash  <-kötelező bevezető, innen tudja a bash, hogy ez szkript, nem pedig a sült krumli receptje TXt-ben.
function wait <-függvény definiálása, a függvény neve WAIT.
{ <- nyitó karakter
    sleep 10 <- a WAIT függvény tartalma / utasítás készlete, várakozik 10 időegységet
} <- záró  karakter
function monitor <-függvény definiálása, a függvény neve MONITOR.
{<- nyitó karakter
    xset q | grep -q  "Monitor is On" <- a MONITOR függvény tartalma / utasítás készlete, lekérdezi a monitor állapotát, ami egy szöveg halmaz, ebben a szöveghalmazban grep-el keresi a "Monitor is On" sztringet, ha van találat, akkor lesz egy boolean érték is, aminek True az állapota, False, ha nincs találat.
}<- záró  karakter

# // eddig tartott az u.n. definíciós szakasz, innen következik a végrehajtó szakasz
while true <-ciklus nyitás, a ciklus addig fut, amíg alábbi parancsok kimenetei igazak (True)
do < -csináld (az alábbiakat)
    while monitor <- míg a Monitor függvény (fentebb definiálva) értéke igaz (True)
    do <- csináld (az alábbiakat)
        wait <- hajsd végre a wait függvényt (várakozz 10 időegységet)
    done <- ennyi / kész (do / csinálás vége)
    while ! monitor <- míg a Monitor függvény (fentebb definiálva) értéke hamis (False) #// megjegyzés: A felkiáltójel a negálás jele, azaz NOT a jelentése, tehát a parancs pontosan így szól: amíg a monitor függvény értéke NEM True
    do <- csináld (az alábbiakat)
        wait <- hajsd végre a wait függvényt (várakozz 10 időegységet)
    done <- ennyi / kész (do / csinálás vége)
    pactl set-card-profile 0 output:hdmi-stereo <- állítsd be a hangkimenetet a HDMI-re # -ez ugye a cikluson belül akkor fut le 10 időegységenként, ha a Monitor függyény értéke igaz.
done<- ennyi / kész (do / csinálás vége) - ez a legfelső While True záró parancsa.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#19 A „function” kifejezést bash scriptben nem ismertem. Java scriptben találkoztam vele. Igen, akkor „wait” a várakozás, ami 10 másodperc, és ilyen időszakonként nézi a script, hogy a

xset q | grep -q  "Monitor is On"

parancsor kimenete-e a „Monitor is On”.
Ha igen (while true), azaz „igaz” (de korábban nem ez volt), akkor egyszer futtatja a parancsort:

pactl set-card-profile 0 output:hdmi-stereo

Aztán fut tovább. A változást figyeli. A „Monitor is Off” -ról (vagy miről) a „Monitor is On” -ra.
Én ezen nem is gondolkodtam, annyira „elvoltatok”. :)

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#20 Tökéletes magyarázat. Tibi is érti szerintem.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#20 Mondjuk annyiban nem jó a script, hogy folyamatosan futtatja a parancssort, ha „true”. Felesleges dolgot csinál.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#23 Bár, ha úgy nézzük, ez nem nagy baj.
Mert, ha figyeltetnénk a hang beállítást, az is egy plusz lépés lenne.

Értékelés: 

0
Még nincs értékelve

Megoldva

#23 Mondjuk annyiban nem jó a script, hogy folyamatosan futtatja a parancssort, ha „true”. Felesleges dolgot csinál.

Igen, ez így meredeknek tűnik, de az egész rendszer (számítógépes rendszer) így működik, azaz gyakorlatilag ebből áll a működés lényege. Folyamtosan fut kismillió lekérdezés, USB portok állapota valami 5-20 ms időközönként (van-e valami bedugva), PCI alrendszer állapota, meg minden, az óra, az időzítés, klikk (egér) és billentyűzet (történ-e gomb lenyomása), minden őrült ciklusokból áll, amik folyamatosan figyelgetnek, lekérdeznek, és szabály szerint reagálnak. Ha egy parancsikon lenne az asztalon, amire klikkelve lefut a parancs, akkor is lenne egy folyamatos figyelés futtatása, ami azt figyeli, hogy klikkeltek-e a parancsikonon. Tehát az, hogy eseményvezérelt (ikonon klikkelés), vagy automatizált folyamatos futású job, az ebből a szempontból annyira nem tér el egymástól.

Lehetne a fenti kódba további eleganciát beletenni, hogy pl. egy változóval még figyelje, hogy volt-e az elöző ciklushoz képest változás, és csak akkor futtatná a hang átiránytását, de tulajdonképpen ez is csak további terhelést jelent, amit nyerünk a vámon, elveszítjük a réven. Jól van ez így, ahogy van.

Értékelés: 

0
Még nincs értékelve

Megoldva

#22 Igen megértettem, ez nem jelenti hogy egy hasonló feladatra megírnák egy ilyet de sokkal közelebb kerültem a működése megértéséhez mint a magyarázat előtt.
Nagy köszönettel tartozom Istvánnal a szájbarágós leírásért.

És az nekem is eszembe jutott hogy a monitor OFF alatt folyamatosan lefut a kimeneti parancs, viszont csináltam teszteket és nem így van. 
Mivel el tudom küldeni a monitort alvóba, a set dpms force off paranccsal, erre van is egy ikonom a panelon, és visszatérésnél láttam többször hogy nem folyamatosan triggereli a pulseaudiót hogy hdmi-re  álljon  a hanem a monitor visszajövet után láttam pár másodperccel hogy akkor kapcsol visza hdmi-re.
A szkript alapján nem tudom ez hogyan működik de működik.
Vagy csak véletlen lenne, de 8-10x teszteltem.

Bátorkodtam a szkript írójától  magyarázatot kérni, készségesen válaszolt, és ezt írta:

"Ugye van 2 függvény, a wait az simán vár 10 másodpercig, a monitor pedig lekérdezi a monitor állapotát. A főprogram először addig pörög amíg a monitor be van kapcsolva. Megnézi az állapotot, vár 10 másodpercet, megint megnézi és így tovább. Ha egyszer kikapcsoltnak látja a monitort átlép a második részbe ami hasonlóan működik de arra vár, hogy visszakapcsoljon a monitor. Ekkor lefut az általad adott parancs és kezdődik minden előlről."

Az utóbbit én sem találom pontosan a szkriptbe de valahogyan mégis így működik.
Bár ezek elvi síkú kérdések de szerintem nagyon érdekes téma, legalábbis nekem az.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#26 Az utóbbit én sem találom pontosan a szkriptbe de valahogyan mégis így működik.

Mert utóbbi magyarázata:

while [CONDITION] # amikor ez a feltétel teljesül,
do # csináld, futtasd:
  [COMMANDS] # a parancssort,
done # majd zárd le a függvényt.

Forrás:
https://linuxize.com/post/bash-while-loop/

És akkor ez így lenne (részlet):

    done
    while ! monitor
    do
        pactl set-card-profile 0 output:hdmi-stereo
    done
done

Nekem úgy tűnt, így lenne jó.
A ! a nem, a false. Vagyis, amikor a monitor változó nem a  „Monitor is On”, akkor ... (do)

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#27 Bár akkor is jó lehet, ha a második ellenőrzés után lép a parancssorra, mint a példád is mutatja.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Megoldva

#27 Tévedtem. Minden úgy van, ahogy írja a tanácsadó. :)
(most volt időm belemélyedni)

Értékelés: 

0
Még nincs értékelve