Προς το περιεχόμενο

Lirc και radio


capthookb

Προτεινόμενες αναρτήσεις

Στο pc έχω ένα tv tuner (saa7134) που έχει και fm tuner και ένα σειριακό lirc receiver που χρησιμοποιώ για τηλεχειρισμό. Θέλω να μπορώ με το τηλεχειριστήριο να μπορώ να τρέχω το radio (εφαρμογή από το xawtv)και να μπορώ να αλλάζω σταθμό, να αυξομοιώνω την ένταση του ήχου και να μπορώ να βάζω την οθόνη σε suspend mode αλλά και να την "ξυπνάω" από το suspend. Μόλις ολοκληρώσω τα scripts που θα χρησιμοποιήσω θα τα βάλω εδώ, σε περίπτωση που κάποιος άλλος τα χρειαστεί.

Έχει κανείς κάποια ιδέα για το πως μπορώ να βάζω/βγάζω την οθόνη σε/από suspend mode;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όντως γίνεται. Είχα προσπαθήσει και παλιότερα αλλά δεν είχα διαβάσει φαίνεται αυτό που έπρεπε.

 

>
#!/bin/bash
DISPLAY='0:0'
STATE=$(xset -display $DISPLAY -q | grep Monitor | sed 's/.*Off.*/OFF/g' | sed 's/.*On.*/ON/g')

if [ "$STATE" == "ON" ]; then
xset -display $DISPLAY dpms force off
else
xset -display $DISPLAY dpms force on
sleep 1 
xset s reset
fi

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Με το irexec θα το καλείς το script για την οθόνη?

 

Έστησα εχθές ένα Asus remote στο ARCH και το σύνδεσα με το vlc για αρχή. Μου άρεσε η ιδέα να σβήνω την οθόνη από εκεί και να μην γράφω κάθε φορά το command στο console. Θα την αντιγράψω.

 

Btw εγώ το καλώ έτσι:

>sleep 1; xset dpms force off

το sleep μπροστά βοηθάει μερικές φορές

 

UPDATE:

έκατσα και το ετοίμασα. Ιδού το .lircrc

>begin
 prog = irexec
 button = KEY_POWER
 config = ~/monitor-toggle.sh
end

 

και το script monitor-toggle.sh. Έβγαλα το display γιατί μου γκρίνιαζε και έβαλα και το sleep καλού κακού.

>#!/bin/bash
STATE=$(xset -q | grep Monitor | sed 's/.*Off.*/OFF/g' | sed 's/.*On.*/ON/g')

if [ "$STATE" == "ON" ]; then
       sleep 1 
       xset dpms force off 
else
       sleep 1 
       xset dpms force on
       sleep 1 
       xset s reset
fi

 

Επίσης μπήκα στον πειρασμό να φτιάξω και την ένταση, πειράζω το master της ALSA στο παρακάτω παράδειγμα ενώ κάνω και mute/unmute:

>begin
 prog = irexec
 button = KEY_KPPLUS
 config = amixer -c 0 set Master 1dB+
end
begin
 prog = irexec
 button = KEY_KPMINUS
 config = amixer -c 0 set Master 1dB-
end
begin
 prog = irexec
 button = AP_LAUNCH
 config = amixer -c 0 set Master toggle
end

 

Ο λόγος που πειράζω το master είναι ότι έτσι μπορώ να ελέγχω την ένταση σε όλες τις εφαρμογές μέσω του remote. Εναλλακτικά κάποιος μπορεί να πειράξει μόνο την ένταση του vlc (για παράδειγμα).

 

Μου φαίνεται θα βάλω και το irexec να τρέχει στο boot του Χ.

Επίσης περίμενω να δω τι θα ετοιμάσεις εσύ, μπορεί να αντιγράψω και κάτι ακόμα :)

 

υγ: να το κάνουμε wiki για το lirc?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

To DISPLAY το έβαλα, γιατί δε δούλευε το xset (δεν έβρισκε το display). Ίσως έχει να κάνει και με τις ρυθμίσεις του περιβάλλοντος του bash. Το δικό μου set | grep DISPLAY δεν επιστρέφει τίποτα. Ναι, με το irexec τρέχω το script. Τόσο το irexec όσο και το irxevent τα τρέχω με το που κάνει login ο χρήστης.

Αυτό είναι το κομμάτι του .lircrc

>
begin
prog = irexec
button = MUSIC
repeat = 0
config = /home/capthookb/docs/programming/bash/screenonoff &
end
begin
prog = irexec
button = VOL+
repeat = 1
config = /home/capthookb/docs/programming/bash/volumeup &
end
begin
prog = irexec
button = VOL-
repeat = 1
config = /home/capthookb/docs/programming/bash/volumedown &
end

Τα volumedown και volumeup scripts θα μπορούσαν να είναι 1 αντί για 2 scripts και με κάποιο όρισμα και if στο $1 να επιλέγει αν θες να αυξήσεις ή να μειώσεις την ένταση. Προτιμώ εξωτερικό script, γιατί μου δίνει μεγαλύτερη ευελιξία και γιατί δε χρειάζεται κάθε φορά που θέλω να αλλάξω κάτι να σκοτώνω το irxevent και να το ξανατρέχω. Νομίζω πως δε διαβάζει τις αλλαγές του .lircrc live.

 

VOLUMEUP script:

>
#!/bin/bash
#vrisko to epipedo entasis autis ti stigmis
LEVEL=$(amixer -c 0 cget iface=MIXER,name='DAC Volume' | grep ': values' | sed 's/.*=//g')


let "NEWLEVEL = $LEVEL +2"
amixer -c 0 cset iface=MIXER,name='DAC Volume' "$NEWLEVEL"
amixer -c 0 cset iface=MIXER,name='DAC Volume',index=1 "$NEWLEVEL"

Το volumedown είναι ίδιο με το volumeup αλλά αντί να αυξάνει το newlevel,το μειώνει κατά 2 μονάδες. Στη συγκεκριμένη κάρτα ήχου οι τιμές που μπορεί να πάρει το κανάλι είναι από 0-127 και γι'αυτό το βάζω αλλαγή κατα 2 μονάδες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

To irxevent χρησιμοποιεί το .lircrc για να στείλει keystrokes κτλ σε όσα προγράμματα δέχονται input από πληκτρολόγιο.Εχει παρόμοια σύνταξη, μόνο που η γραμμή του config είναι διαφορετική Π.χ. το κομμάτι του .lircrc που έφτιαξα για το radio είναι το εξής:

>
begin
prog   = irexec
button = RADIO
repeat = 0
config = /home/capthookb/docs/programming/bash/radio &
end

begin
prog = irxevent
button = DOWN
repeat = 0
config = Key Down konsole
end
begin
prog = irxevent
button = RIGHT
repeat = 0
config = Key Page_Up konsole
end
begin
prog = irxevent
button = LEFT
repeat = 0
config = Key Page_Down konsole
end

begin
prog = irxevent
button = UP
repeat = 0
config = Key Up konsole
end

Ξεκινάω το πρόγραμμα με το irexec που τρέχει το radio script και μετά με το irxevent στέλνω στο konsole ουσιαστικά τα keystrokes που θέλω.

 

 

Να και το radio script:

>
#!/bin/bash
PROG=konsole

if [ "$(pidof $PROG)" ];
then
killall -9 $PROG
killall -9 sox
else
       sox --single-threaded -c 2 -b 24 --buffer 4096 -r 32000 -t alsa hw:1,0 -t alsa default & 
konsole -e radio &
fi

Έχω βάλει το if, έτσι ώστε πατώντας το ίδιο κουμπί στο τηλεχειρηστήριο να μπορώ να τρέχω ή να τερματίζω το πρόγραμμα (λίγο ανορθόδοξα βέβαια).

 

 

 

Όχι τα irexec,irxevent δεν τα τρέχω από το .xinitrc. Παλιότερα έβαζα ένα softlink στο ~/.kde/Autostart και έτρεχαν από εκεί. Τώρα με το kde4 υπάρχουν κάπου αλλού οι ρυθμίσεις για τα προγράμματα που εκινούνται αυτόματα κατά το login αλλά δεν έχω ασχοληθεί να βρω που είναι.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Thnx για τις πληροφορίες. Εγώ τα έχω όλα σε auto-login με XFCE. Θα κοιτάξω είτε να τρέχω το irexec από το startup του XFCE (έχει) είτε θα το δοκιμάσω μέσω .xinitrc.

 

Ωραίες ιδέες, η μόνη βλακεία μου είναι ότι είχα 2 asus-dh remotes και το ένα το πέταξα πριν κάτι μήνες :(

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν θυμάμαι καλά, μπορείς να έχεις όσα remotes θέλεις. Κι εγώ έχω ένα μικρό της Asus (tv-tuner), το οποίο χρησιμοποιώ με το σειριακό receiver και όχι με το receiver της κάρτας που συνδέεται με jack στο πίσω μέρος. Όλο λέω να πάω να πάρω ένα φθηνό με πολλά κουμπιά, να έχω ευελιξία στα κουμπιά και στις ρυθμίσεις, αλλά δεν έχω αξιωθεί ακόμα. Γενικά, επειδή το έχω στο δωμάτιο το pc και σαν htpc, χειρίζομαι xbmc, mythtv(όταν έβαζα) vdr, tvtime (παλιότερα), τώρα radio κτλ.

Τέτοιες λύσεις είναι που κάνουν το linux να υπερτερεί κατά πολύ έναντι άλλων λειτουργικών, κατά την άποψή μου. Μπορείς με απλά εργαλεία να σχεδιάσεις όποια λειτουργία θες και να ευχαριστηθείς κάτι δημιουργικό και παράλληλα πρακτικό.

 

Υ.Γ.

Κάποιο φεγγάρι είχα φτιάξει και osd για το τηλεχειριστήριο (μέσω του xosd), λειτουργίες Sleep με χρονοδιακόπτη κτλ. Δε θυμάμαι τι άλλο. Αν τα βρω θα τα ποστάρω.

Παλιότερα είχα πρόβλημα με κάθε αλλαγή σε νέο kernel, συνήθως δε δούλευε το lirc. Αλλά από κάποια στιγμή που ενσωματώθηκε στον πυρήνα είναι εγγύηση!.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό που μου μπήκε στο μυαλό τώρα είναι να μπορέσω με κάποιο τρόπο να κλείνω τους σκληρούς δίσκους και ότι άλλο δε χρειάζεται (π.χ fan της κάρτας γραφικών). Όχι όμως να αναβοσβήνουν, γιατί θα χαλάσουν στο τέλος. Αν με κάποιο τρόπο μπορέσω να φτιάξω ένα κομμάτι της μνήμης που περισσεύει σαν εικονικό δίσκο και να τρέχω από εκεί ότι χρειάζεται πιστεύω θα μπορέσω να κλείσω τους δίσκους.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν έχω πρόσφατη εμπειρία στο θέμα των δίσκων... τελευταία φορά που το έψαξα ήταν με ένα Vaio σε arch to 2005-6 (5μιση ώρες μπαταρία με wired-lan!). Τότε είχα δουλέψει laptop-mode-tools και όχι κάτι άλλο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να παραθέσω και εγώ ένα scriptaki που είχα βρει και είχα πειράξει για commandline audio adjust + notify-send message.

 

file: alsaVolChange.sh

>
#!/bin/sh
version=0.03
# created by abarilla
# modified by wujaklija
# modified by ^^FiCK^^
#usage="usage: $0  -c up|down|mute [-i increment] [-m mixer]"
usage="$0 Version $version Help\nDependencies: libnotify, alsa-utils\nusage:\n\t $0  [OPTIONS] -c COMMAND \nCOMMAND:\n-c\t up \n\t\t(increase volume by increment)\n\tdown \n\t\t(decrease volume by increment)\n\tmute \n\t\t(mute volume) \n\nOPTIONS:\n-i\t increment \n\t\t(the amount of db to increase/decrease)[default:2500] \n-m\t mixer \n\t\t(the device to change)[default:Master]"

#Default values
command=
increment=2300
mixer="Master"

while getopts "c:i:m:h" o
do case "$o" in
   c) command=$OPTARG;;
   i) increment=$OPTARG;;
   m) mixer=$OPTARG;;
   h) echo -e "$usage"; exit 0;;
   ?) echo -e "$usage"; exit 0;;
esac
done

#if [[ -z $command ]] || [[ -z $increment ]] || [[ -z $mixer ]]
#then
#     echo $usage
#     exit 1
#fi

#shift $(($OPTIND - 1))
#command=$1

#if [ "$command" = "" ]; then
#    echo -e "usage: $0 {up|down|mute} [increment]"
#    exit 0;
#fi

display_volume=0
icon_name=""
if [ "$command" = "up" ]; then
   display_volume=$(amixer set $mixer $increment+ unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
else 
if [ "$command" = "down" ]; then
    display_volume=$(amixer set $mixer $increment- unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
else 
	if [ "$command" = "mute" ]; then
	    if amixer get Master | grep "\[on\]"; then
		display_volume=0
		icon_name="notification-audio-volume-muted"
		amixer set $mixer mute
	    else
		display_volume=$(amixer set $mixer unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
	    fi
	else
	     echo -e $usage
	     exit 1
	fi
fi
fi

if [ "$icon_name" = "" ]; then
   if [ "$display_volume" = "0" ]; then
       icon_name="notification-audio-volume-off"
   else
       if [ "$display_volume" -lt "33" ]; then
           icon_name="notification-audio-volume-low"
       else
           if [ "$display_volume" -lt "67" ]; then
               icon_name="notification-audio-volume-medium"
           else
               icon_name="notification-audio-volume-high"
           fi
       fi
   fi
fi
#notify-send -u normal -t 100 "$mixer"
notify-send " " -i $icon_name -h int:value:$display_volume -h string:synchronous:volume 
#notify-send "$mixer" -i $icon_name

 

manual:

>
alsaVolChange.sh Version 0.03 Help
Dependencies: libnotify, alsa-utils
usage:
 alsaVolChange.sh [OPTIONS] -c COMMAND 
COMMAND:
-c	 up 
	(increase volume by increment)
down 
	(decrease volume by increment)
mute 
	(mute volume) 

OPTIONS:
-i	 increment 
	(the amount of db to increase/decrease)[default:2500] 
-m	 mixer 
	(the device to change)[default:Master]

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...