Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Raspberry-ongelma: pikakuvakkeella suoritettava skripti

jaketsu [24.09.2020 17:27:46]

#

Tuli ostettua Raspberry Pi 4 sekä ulkoinen "virallinen" kosketusnäyttö. Nyt joutuu siis todella pitkästä aikaa käyttämään Linuxia, ja vähän haasteita on jo ilmaantunut. Yritän säätää skriptillä tuon näytön kirkkautta, koska sehän on oletuksena täysillä, eikä fyysisiä näppäimiä säätöön ole. Säätö onnistuu terminaalissa melko helposti näin:

sudo su
echo 100 > /sys/class/backlight/rpi_backlight/brightness && exit

Tarkoituksena ei kuitenkaan ole käyttää tähän jatkossa näppistä, vaan haluaisin saada tehtyä työpöydälle pikakuvakkeen tai edes jonkun tiedoston, joka suorittaisi klikkaamalla tuon komennon. Niinpä tein kokeeksi työpöydälle tiedoston "kirkkaus50.sh", jonka sisältö on

#!/bin/bash
sudo su | echo 100 > /sys/class/backlight/rpi_backlight/brightness && exit

Annoin tiedostolle suoritusoikeudet (-rwxr-xr-x) ja kokeilin suorittaa sen komennolla

sh kirkkaus.sh

josta tulee varoitus

kirkkaus50.sh: 3: kirkkaus50.sh: cannot create /sys/class/backlight/rpi_backlight/brightness: Permission denied

Sama tulee myös oikeuksilla rwxrwxrwx. Komennolla

sudo sh kirkkaus50.sh && exit

kirkkaus säätyy odotusten mukaisesti, mutta terminaaliin jää käyttäjäksi sudo. Miten tämän säädön saisi toimimaan ilman näppäimistöä?

Metabolix [24.09.2020 17:54:25]

#

Mietitäänpä ensin noita nykyisiä versioita:

Ensimmäinen komentosi sudo su avaa uuden komentorivin, jossa on kirjautuneena root. Tämä on sikäli väärin tehty, että sudo -s olisi oikea tapa avata uusi komentorivi sudolla. Tässä voit tietysti tehdä sitten mitä tahansa. Komento exit sulkee kyseisen komentorivin.

Toinen versio on aivan älyvapaa. Ajat uuden komentorivin (sudo su), jossa ei kuitenkaan tapahdu mitään. Ohjaat putkella tämän tulosteen echo-komennolle. Tulostat echolla tekstin 100 ja ohjaat sen tiedostoon; tämä tapahtuu kaikki sudon ulkopuolella. Lopussa on exit, jolla ei ole mitään merkitystä, kun tiedostoon tallennettu skripti päättyy tuossa muutenkin.

Asiaan: Olennaista on ymmärtää, että >-merkki ei liity edeltävään komentoon: sudo x > y sisältää komennon sudo x ja erikseen ohjauksen > y. Ymmärrettävästi ei ole paljonkaan hyötyä käyttää pääkäyttäjän oikeuksia luvun 100 tulostamiseen, jos kuitenkin yrittää sitten tallentaa tiedon tavallisen käyttäjän oikeuksilla. Asian pitäisi mennä päinvastoin, eli echo 100 voi olla vaikka ilman sudoa mutta tiedostoon kirjoittaminen vaatii pääkäyttäjän oikeudet.

Hakemasi ratkaisu näyttää siis tältä:

#!/bin/sh
sudo sh -c 'echo 100 > /sys/class/backlight/rpi_backlight/brightness'

Tässä siis käynnistetään sudolla uusi komentotulkki, joka ajaa hipsuissa annetun yhden komennon. Halutessasi voit pilkkoa ratkaisun kahteen osaan:

#!/bin/sh
echo 100 > /sys/class/backlight/rpi_backlight/brightness
sudo sh yllä-oleva-skripti.sh

Joskus käytetään tee-ohjelmaa tiedostojen kirjoittamiseen, jotta ei tule noita murheita >-merkin kanssa:

echo 100 | sudo tee /sys/class/backlight/rpi_backlight/brightness
sudo tee /sys/class/backlight/rpi_backlight/brightness <<< 100 >/dev/null

jaketsu [25.09.2020 17:17:55]

#

Metabolix kirjoitti:

Hakemasi ratkaisu näyttää siis tältä:

#!/bin/sh
sudo sh -c 'echo 100 > /sys/class/backlight/rpi_backlight/brightness'

Kiitoksia, tuo ratkaisi ongelman. Tuli luotettua liikaa sekalaisilla kyseisiin laitteisiin liittyvillä foorumeilla oleviin ohjeisiin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta