LINUX.ORG.RU

screen выключение сессии.


0

0

Хочу сделать комбинацию клавиш для включения и выключения музыки. Делаю:

screen -t MPlayer /usr/bin/mplayer http://icecasturl:8000/mpd.ogg
Но как теперь вырубить эту сессию, не заходя в нее?

★★★★★
Ответ на: комментарий от sdio

для этого мне надо знать pid процесса...
Через `ls /var/wun/screen/*/` могу получить список pid'ов всех процессов, запущенных через screen, а как получить pid имено моего mplayer'а?

Tanger ★★★★★
() автор топика
Ответ на: комментарий от sin_a

>а ещё mpd
mpd это конечно хорошо, но он работает на другом компе дома с которого вещается на icecast, что я как раз и хочу мплеером воспроизвести...
Или mpd умеет url воспроизводить? Если в m3u пихнуть?

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

Используй отдельный проигрыватель для музыки. Который демонизируется и управляется внешними командами. Как mpd или mocp.

Да, и как можно одновременно смотреть кино и слушать музыку я не понимаю, у меня мелькнула мысль о возможности такого но я честно говоря подумал что этим смело можно пренебречь.

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

>Да, и как можно одновременно смотреть кино и слушать музыку я не понимаю

Например, запустил кино и решил выключить музыку...
И хотелось бы все же знать, как, если будет нужно запустить что-то в демоне через screen, как убить...

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

Блин, у тебя mpd крутится. К нему масса клиентов. Выключай прямо его.

Или его кто-то ещё другой слушает?

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

Управляю... Но комп в другой комнате... Не хочу музыку через комнаты слушать :)

Хотя... Короб в ту комнату пол года назад уже провел... :) Думаю витой паре будет не тесно, если в нее еще положить провод от колонок...
Только вопрос: 30 метровый провод на звук не сильно повлияет?)

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

Может скрину можно какой сигнал посылать, если скринов много то выделить его названием. Собственно если скрин один то можно просто убивать скрин.

sin_a ★★★★★
()
Ответ на: комментарий от Tanger

Ты поток по сети получаешь? Значит есть возможность и обратиться.

Хотя если кто то продолжает слушать, то только гасить свой mplayer.

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

еще rtorrent висит.
Как названием выделять?
Ман читал, но не нашел. (название ведь с помощью -t делается?)

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

Вроде да. Я со скринами акробатических трюков не делаю, поверхностное представление есть. Название дать ему можно, по названию обратиться тоже, сейчас посмотрел, вроде туда даже ctrl+c можно посылать внутрь. Просто завести отдельный скрин с специальным заголовком для mplayer и больше в него ничего не сажать.

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

Ну вот это мне и надо...
1. Как обратиться по названию (правильно ли я понимаю, что название - это -t?)
2. Как послать С-с? (Есть опция X, но я не понял, какую команду она хочет...)

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

-i will cause the interrupt key (usually C-c) to interrupt the display immediately when flow-control is on. See the «defflow» .screenrc command for details. The use of this option is discouraged.

По поводу названия - просто попробуй и проверь :) Я такими вещами не заморачивался.

sin_a ★★★★★
()

Хм... Если я правильно понял что требуется:

# Создание сессии
screen -d -m -S mplayer /usr/bin/mplayer http://icecasturl:8000/mpd.ogg

# Поставить на паузу или снять с паузы
screen -S mplayer -p 0 -X register . " "
screen -S mplayer -p 0 -X paste .

# Послать mplayer'у команду завершения
screen -S mplayer -p 0 -X register . "q"
screen -S mplayer -p 0 -X paste .
Таким способом можно посылать любые команды.

P.S. Вроде был более простой способ посылать текст в сессии screen'а так, будто это делает пользователь. Не с помощью register + paste. Но я его не могу вспомнить =(. Если кто знает - скажите.

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

1. Как обратиться по названию (правильно ли я понимаю, что название - это -t?)

Не -t, а -S. По названию подцепиться к сессии можно так:

screen -r mplayer
А создаётся сессия так:
screen -S mplayer

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

спасибо :)
пошел добавлять комбинацию клавиш в rc.lua :)

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

> Есть опция X, но я не понял, какую команду она хочет...

Запускай в нём mplayer в фоне, его PID получишь на месте примерно так:

PID=(`ps|grep mplayer`);kill ${PID[1]}

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

ps aux, там пишется во сколько приложение было запущено.

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

Решение от mironov_ivan работает.

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

bash в системной переменной $! хранит pid последнего запущенного из данной копии оболочки процесса. Как это использовать - твоё дело. Можно, например, так:

screen -t MPlayer /usr/bin/mplayer http://icecasturl:8000/mpd.ogg &
echo $! > /tmp/screen.pid
убить процесс можно так:
kill `cat /tmp/screen.pid`

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

о...
Спасибо большое!
Не знал.

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

>killall mplayer?

А если я, например, паралельно киношку другим мплеером смотрю?


Параллельно с музыкой? Простите, но как? (:

tensai_cirno ★★★★★
()
Ответ на: комментарий от Tanger

screen почему-то pid потом меняет...

Потому-что screen состоит из двух частей - сервера и клиента.

Закрыть сессию screen можно так:

screen -S mplayer -X quit
При этом программы, работающие в закрываемой сессии, получат сигнал SIGHUP. Реакция на него зависит от программы. В большинстве случаев по этому сигналу программы завершаются.

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

запустил киношку, недосмотрел, поставил на паузу, включил музыку (особенно часто такое бывает при просмотре сериалов mplayer /path/to/serial/Season*/* и смотришь по две серии в день, а мплеер не выключаешь)

maloi ★★★★★
()
Ответ на: комментарий от Tanger

Точно, screen форкается. Тогда можно добавить -D -m, чтобы не форкался. Но в этом случае он завершится при завершении родительского процесса. Можно писать pid mplayer'а и завершать mplayer, а не screen.

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

Есть ещё более правильный вариант: отказаться от screen и запускать mplayer в фоне (например с помощью nohup), а контролировать его через FIFO. Например:

# Создаём трубу
mkfifo mplayercmd

# Запускаем mplayer
nohup mplayer -really-quiet -input file=mplayercmd moozeg.flac >/dev/null 2>&1 &

# Пауза
echo "pause" >mplayercmd

# Выход
echo "quit" >mplayercmd
Полный список доступных команд есть здесь: http://www.mplayerhq.hu/DOCS/tech/slave.txt.

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