LINUX.ORG.RU

Дамп экрана текущей консоли без рутовых прав


0

0

Хочу получить доступ к дампу экрана в реальной консоли (не эмуляторе терминала, а в Ctrl+Alt+FX).
Но /dev/vcsaX не читается без прав рута.
Можно ли не меняя прав доступа на файл /dev/vcsaX,
получить дамп экрана текущий консоли другими способами ?
Мож какие-то особые функции ?

Подробности

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

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

>>> anonomouso wrote:

>>> Мне же нужно получить как-бы скриншот экрана.


Тогда тебе как бы нужен fbgrab.


Не не ! Не картинку, а символы и атрибуты (цвета). Хочу получить доступ к /dev/vcsaX с правами юзера.

По идее можно через команду screen, но не люблю этот недо-эмулятор-мультитерминалов.

anonomouso
() автор топика

Хотелось бы узнать escape коды, функции для чтения символов с экрана.
Просмотрел
man console_codes
man console_ioctl
есть для записи на экран, а для чтения что-то не нашел.

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

Примерная схема работы терминала такова:

[устройство]<---[выходная очередь]<---эхо вывод---[входная очередь]

Если символ читается из устройства ввода, он попадает во входную очередь.

Если есть процесс, который читает символы, то они направляются ему прямо из входной очереди.

Иначе, если разрешен эхо-вывод, то символы из входной очереди направляются в выходную.

Если процесс записывает символ, то он попадает в выходную очередь напрямую.

Символы из выходной очереди направляются на устройство.

Обе очереди ограничены, при переполнении входной-они реджектятся, при переполнении выходной, ядро приостанавлявает пишущий процесс, пока место в ней не освободится.

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

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

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

Вообще, man termios(3) или termios.h посмотрите.

вот собственно функции для работы с терминалом оттуда:

tcgetattr, tcsetattr, cfgetispeed, cfgetospeed, csetispeed, csetospeed, tcdrain, tcflow, tcflush, tcsendbreak, tcgetpgrp, tcsetpgrp, tcgetsid

anonymous
()

Если это действительно можно, значит надо будет писать багрепорт.
ибо нефиг!

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

Он не анонимус, он anonomouso! Анонимус-это мы, и имя нам легион:-)

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

Почему же багрепорт;-)

Я забыл упомянуть, что системный вызов чтения или записи, т.н. дисциплина обслуживания линии связи, драйвер физического устройства-это все уровень ядра. И если действительно вам удастся задампить преобразованный поток перед передачей его драйверу физического устройства, то... вам точно не понадобится писать баг репорт:-) вы или сами сможете этот баг исправить, или сами преднамеренно подправили ядро:-)

anonymous
()

>>> Мы видим, что если символ попал в устройство, то его нет нигде

более, и достать его нельзя иначе, чем прочитав из устройства

напрямую. Таким образом, нельзя сделать снапшот устройства,


не читая самого устройства.


anonymous (*) (01.01.2010 17:26:53)



Ну, мне прямой доступ к видеопамяти видеокарты не нужен.
А мне хотелось получить лишь доступ
для текущего терминала
к текстовому буферу виртуального текстовой видеопамяти /dev/vcsaX.

По дефолту доступ к /dev/vcsaX разрешен root и группе tty.
Ну я подумал что раз я залогинился на терминале /dev/ttyX,
то Линукс даст мне доступ полный доступ к текущей (а не к всем) /dev/vcsaX.

Но похоже в Линуксе зачем-то запретили по дефолту доступ даже к текущей /dev/vcsaX.

Лучше было бы если бы ядро проверяло, когда программа обращается к /dev/vcsaX, номер терминала /dev/ttyX программы и номер /dev/vcsaX и разрешало такой программе доступ к нужной /dev/vcsaX.
Так было бы и безопасно.

Вообще, man termios(3) или termios.h посмотрите.

anonymous (*) (01.01.2010 17:59:50)


Посмотрел. Куча каких-то настроек не для меня.


дорогой анонимус, http://linux.die.net/man/4/vcsa

нету кодов для чтения. а почему просто не дать права ?


или вступить >>> в группу ttyN.


gavv (*) (01.01.2010 23:26:42)



Похоже так и сделаю. Для десктопа, домой вполне можно разрешить моему юзеру R/W доступ ко всем консолям. А вот на серверах так похоже нельзя делать в целях безопасности.

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

Программа conspy ответит на все ваши вопросы. Это и ответ как, и ответ почему вновь создаваемые пользователи по умолчанию не включены в группу tty.

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

>>> Программа conspy ответит на все ваши вопросы. Это и ответ как,

и ответ почему вновь создаваемые пользователи по умолчанию

не включены в группу tty.


anonymous (*) (02.01.2010 17:32:09)



Видимо мне придется создать спец-группу для доступа только к /dev/vcsaX.
И добавить юзера в эту группу.

anonomouso
() автор топика

--------------------------------------------------
vcs.sh

#!/bin/sh

groupadd vcs


for file in /dev/vcs /dev/vcs[0-9] ;
do
echo $file
chown root:vcs «$file»
done

for file in /dev/vcs /dev/vcs[0-9] ;
do
ls -Al $file
done

--------------------------------------------------
vcsa.sh

#!/bin/sh

groupadd vcsa


for file in /dev/vcsa /dev/vcsa[0-9] ;
do
echo $file
chown root:vcsa «$file»
done

for file in /dev/vcsa /dev/vcsa[0-9] ;
do
ls -Al $file
done

--------------------------------------------------
id ivan
usermod -G группы-Ivana,vcs,vcsa ivan

--------------------------------------------------

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