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/ (esimerkiksi ohjelmalla "Käynnistettävät ohjelmat" eli "Startup Applications").
Valmius- tai lepotilasta herätessä suoritettaville komennoille ei ole samalla tavalla valmista ratkaisua, eli ei ole standardin mukaista
kotihakemiston alihakemistoa, johon komentotiedostoja 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 poiskytkentää, en saanutkaan tarvittavaa xrandr-komentoa toimimaan systemd:n kautta. Koska tarvitsin joka tapauksessa käynnistinpalkkiin 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ä komentotiedostossa, 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:
[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:
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 komentotiedoston suorituksen – tai molemmat:
#!/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 poiskytkentä, 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 komentotiedostoja, jotka kaikki suoritetaan koneen herätessä.
Sitä en sitten tiedä miten Waylandin kanssa käy.
Edit: korjattu liuta kirjoitusvirheitä.