LINUX.ORG.RU

Можно ли управлять только одним

 ,


0

1

Настроил управление mplayer-ом с инфракрасного пульта.

Всё работает, да вот беда, команды выполняют всё запущенные mplayer-ы.

Можно ли управлять только одним, активным mplayer-ом?

Пока вижу только одно решение — написать скриптик-костыль, который будет
находить активный mplayer и слать ему команду. А запускать этот скрипт будет irexec.

Купи обычный ИК-пультик, эмулирующий клавомышу (4-5 баксов на ибее). Все будет ОК.

anonymous
()
Ответ на: комментарий от anonymous

ИК-пультик, эмулирующий клавомышу

Это не секьюрно.

LinuxUser ★★★
() автор топика

Написал скрипты. Первый — обёртка mplayer-а, для каждого создаёт fifo файл из которого mplayer читает команды. Этот скрипт нужно обозвать mplayer и положить в ~/bin.

#!/bin/bash
# Description: own commands file per every mplayer wrapper version 1.0 beta
# Author: Alexey Alexeev alxv.su@gmail.com
# License: WTFPL

if [ `ps -p $PPID -o comm=` = 'mplayer' ]; then
	CMDS_FILE=~/.mplayer/commands.$$
	mkfifo $CMDS_FILE
	exec /usr/bin/mplayer -input file=$CMDS_FILE "$@"
else
	~/bin/mplayer "$@" &
fi

wait $!; rm ~/.mplayer/commands.$!
Второй скрипт шлёт команды активному mplayer-у или переключается между запущенными mplayer-ами если ему передать ACTIVATE_NEXT_WIN. Скрипту нужны xprop из пакета x11-utils и wmctrl (для переключения между mplayer-ами). Называем его mplayer-ctrl и кладём в ~/bin.
#!/bin/bash
# Description: active mplayer controller version 1.0 beta
# Dependences: xprop form x11-utils and wmctrl (for windows switching)
# Author: Alexey Alexeev alxv.su@gmail.com
# License: WTFPL

if ! command -v xprop > /dev/null; then
    echo 'I require xprop from x11-utils package. Please, install it.' >&2
    exit 1
fi

ACTIVE_WIN_ID=`xprop -f _NET_ACTIVE_WINDOW 0x ' $0' -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 2`
ACTIVE_WIN_PID=`xprop -id $ACTIVE_WIN_ID -f _NET_WM_PID 0c ' $0' _NET_WM_PID | cut -d ' ' -f 2`
CMDS_FILE=~/.mplayer/commands.$ACTIVE_WIN_PID

if [ "$1" = 'ACTIVATE_NEXT_WIN' ]; then
    if ! command -v wmctrl > /dev/null; then
        echo 'I require wmctrl for windows switching. Please, install it.' >&2
        exit 1
    fi
    PIDS=`ls ~/.mplayer/commands.* 2>/dev/null | grep -o '[[:digit:]]\+$'`
    FIRST_PID=`echo $PIDS | cut -d ' ' -f 1`
    PIDS="$PIDS $FIRST_PID"
    NEXT_WIN_PID=$FIRST_PID
    if [ -p $CMDS_FILE ]; then
        for i in $PIDS; do
            if [ "$NEXT_I_LAST" ]; then
                NEXT_WIN_PID=$i
                break
            fi
            if [ "$i" = "$ACTIVE_WIN_PID" ]; then
                NEXT_I_LAST=1
            fi
        done
    fi
    NEXT_WIN_ID=`wmctrl -l -p | grep "^[^ ]\+ \+[^ ]\+ \+$NEXT_WIN_PID" | cut -d ' ' -f 1`
    wmctrl -i -a "$NEXT_WIN_ID"
else
    if [ -p "$CMDS_FILE" ]; then
        echo $@ > "$CMDS_FILE"
    fi
fi
Пример .lircrc:
begin
     button = QUICK_POWER
     prog = irexec
     config = mplayer-ctrl ACTIVATE_NEXT_WIN
end

begin
    button = PLAY/PAUSE
    prog = irexec
    config = mplayer-ctrl pause
end
Не забудьте добавить в автозагрузку irexec.

Замечания приветствуются.

LinuxUser ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.