Kirjoittaja Aihe: Komentojen suoritus koneen herätessä: täydennetty ratkaisu  (Luettu 929 kertaa)

AimoE

  • Käyttäjä
  • Viestejä: 1379
    • Profiili
Huomaan että onlen jättänyt kertomatta ratkaisun ongelmaan jota aikoinaan kyselin täällä.

Järjestelmän käynnistyessä käynnistettävälle palvelulle voi kirjoittaa systemd-yksikkö­määrityksen hakemistoon ~/.local/share/systemd/user/ tai ~/.config/systemd/user/. Kirjautuessa suoritettavalle komennolle voi tehdä käynnistimen hakemistoon ~/.config/autostart/ (esi­merkiksi ohjelmalla "Käynnistettävät ohjelmat" eli "Startup Applications"). Valmius- tai lepo­tilasta herätessä suoritettaville komennoille ei ole samalla tavalla valmista ratkaisua, eli ei ole standardin mukaista kotihakemiston ali­hakemistoa, johon komento­tiedostoja voi sijoittaa sitä varten.

Ensin kyselin miten saan haluamani komennot suoritetuksi koneen palatessa valmiustilasta. Siihen löytyikin ratkaisu, mutta kun yritin ulkoisen näytön pois­kytkentää, en saanutkaan tarvittavaa xrandr-komentoa toimimaan systemd:n kautta. Koska tarvitsin joka tapauksessa käynnistin­palkkiin kiinnitetytn kuvakkeen, jonka avulla voin ottaa ulkoisen näytön käyttöön tai pois käytöstä, en pitänyt asiaa silloin tärkeänä.

Myöhemmin minulle valkeni, että X-ohjelmien suoritus käyttäjän istunnossa vaatii DISPLAY-asetuksen lisäksi XAUTHORITY-asetuksen. Käyttäjä­kohtainen asetus ei ole mielekäs hakemistoon /lib/systemd/systemd-sleep viedyssä komento­tiedostossa, joten tarvitsen ratkaisuksi oman systemd-yksikön, jossa määritys tehdään käyttäjä­kohtaisesti. Jekku on siinä, että tämä palvelu pitää suorittaa järjestelmä­prosessissa, koska käyttäjä­prosessi ei ei voi viitata järjestelmä­puolen targetteihin, kuten Tomin aikanaan huomautti. Ja tämä ongelmahan oli jo ratkaistu ekassa ketjussa.


Tässä siis koko ratkaisu, eli noiden kahden ketjun ratkaisut yhteen pantuna.


Järjestelmä­prosessissa käyttäjä­kohtaisesti suoritettavaan tiedostoon /etc/systemd/system/act_on_resume@.service tarvitaan joukko käyttäjän kontekstin asetuksia:

Koodia: [Valitse]
[Unit]
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target

[Service]
User=%I
Group=%I
WorkingDirectory=/home/%I
Environment=PATH=/usr/local/bin:/usr/bin:/bin
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/%I/.Xauthority
ExecStart=/usr/local/bin/act_on_resume

[Install]
WantedBy=sleep.target

Tässä "%I" viittaa mallin (template) ilmentymän (instance) nimeen, joka asetetaan palvelua luotaessa:
Koodia: [Valitse]
sudo systemctl enable act_on_resume@$USER.service
(Nuo hibernate ja hybrid-sleep -kohteet ovat mukana vain täydellisyyden vuoksi; oikeasti en niitä käytä.)


Tiedostoon /usr/local/bin/act_on_resume voikin sitten kirjoittaa joko komentoja suoraan tai käyttäjä­kohtaisen komento­tiedoston suorituksen – tai molemmat:

Koodia: [Valitse]
#!/bin/sh -e
xrandr --output HDMI-0 --off
[ -e bin/act_on_resume ] && sh bin/act_on_resume


Toistaiseksi en ole keksinyt mitään muuta käyttöä tälle kuin tuo ulkoisen näytön pois­kytkentä, mutta onpahan ratkaisu valmiina jos jotain muuta tarvitaan. Niinpä en ole virittänyt tätä niin pitkälle että olisi joku hakemisto, johon voi pudottaa erillisiä määritysksiä tai komento­tiedostoja, jotka kaikki suoritetaan koneen herätessä.

Sitä en sitten tiedä miten Waylandin kanssa käy.

Edit: korjattu liuta kirjoitusvirheitä.
« Viimeksi muokattu: 02.12.18 - klo:11.40 kirjoittanut AimoE »

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 10513
    • Profiili
    • Tomin kotisivut
Sitä en sitten tiedä miten Waylandin kanssa käy.

Waylandin kanssa tarvitset jonkin korvikkeen xrandrille, koska sitä ei voi silloin käyttää. Ratkaisu on todennäköisesti myös työpöytäkohtainen, koska ei ole mitään yleistä rajapintaa, jolla noita asetuksia voisi säätää. Jotain tietoa Gnomen suunnitelmista/toteutuksesta (missä lie oikea dokumentaatio). KDE:n vastaava toteutus vaikuttaa valmiimmalta.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

AimoE

  • Käyttäjä
  • Viestejä: 1379
    • Profiili
Waylandin kanssa tarvitset jonkin korvikkeen xrandrille, koska sitä ei voi silloin käyttää.

Näin oletinkin.

Ratkaisu on todennäköisesti myös työpöytäkohtainen, koska ei ole mitään yleistä rajapintaa, jolla noita asetuksia voisi säätää. Jotain tietoa Gnomen suunnitelmista/toteutuksesta (missä lie oikea dokumentaatio). KDE:n vastaava toteutus vaikuttaa valmiimmalta.

Eipä sitten ole kiirettä waylandin kokeiluun.

Tuosta voi kuitenkin päätellä, että systemd-yksikkö ei toimi Waylandin kanssa, vaan siitä pitää siirtää ympäristömuuttujien asetukset siihen erilliseen komentotiedostoon jotta yksikkö toimisi sekä Waylandin että X:n kanssa. Muitakin ristiriitoja voi tulla vastaan, mutta tuo nyt on ilmiselvä.

jarmala

  • Käyttäjä
  • Viestejä: 343
    • Profiili
Järjestelmän käynnistyessä käynnistettävälle palvelulle voi kirjoittaa

Kiitän. Noiden hakemistojen sijaintia onkin haeskeltu jo pitemmän aikaa. Kiitos hyvästä yhteenvedosta - nyt tietää, minne noita vanhan DOSin autoexec.bat:in hommia oikein pitää linuxissa väkertää.

On tämä linux vaan hankalampi: DOSissa oli config.sys ja autoexec.bat, joihin kirjattiin kaikki käynnistettäessä ajettavat ohjelmat. Linuxissa ne on siellä täällä eikä koskaan tiedä, missä niiden pitäisi olla.

Joku kyllä varmaan on tehnyt nettisivun, joka kertoo näiden käynnistyksissä ajettavien ohjelmien oikeat paikat. Kertokaahan minullekin, mikä se sivu on.

Pakinlinus

  • Käyttäjä
  • Viestejä: 103
    • Profiili
Minulla on vaivannut tuo lepotilasta palautuminen jo pitkään. Aina kun kone ei palaudu ja on väkisin sammutettava virtakytkimestä ja uudelleen käynnistyessä olen antanut luvan ongelmaraportille. Jotenkin se on päivityksissä koska toisinaan palautus toimii toisinaan taas ei. Eli sama virhe toistuu toisinaan päivityksissä näinkö se menee.

AimoE

  • Käyttäjä
  • Viestejä: 1379
    • Profiili
Minulla on vaivannut tuo lepotilasta palautuminen jo pitkään. Aina kun kone ei palaudu ja on väkisin sammutettava virtakytkimestä ja uudelleen käynnistyessä olen antanut luvan ongelmaraportille. Jotenkin se on päivityksissä koska toisinaan palautus toimii toisinaan taas ei. Eli sama virhe toistuu toisinaan päivityksissä näinkö se menee.

Tämä on uusi keskustelunavaus, kuuluisi omaan ketjuunsa.

Silloin kun minulla on ollut tuota ongelmaa, kyse oli siitä että syystä tai toisesta NVIDIA:n suljettu ajuri ei ollut käytössä. Tällä koneella lepotilasta paluu toimii moitteettomasti vain suljetun ajurin kanssa. Näin käy, koska koneessa sattuu olemaan NVIDIA:n GPU.