И снова о втором мониторе из планшета…

Оказавшись обладателем среднего такого планшета с нерабочим сенсором (старшенький сынуля постарался) долго думал, куда приспособить. Гуглил, гуглил и нагуглил (раз, два, Хакер №227), а так же много других рецептов с участием spacedesk, iDispla и некоторых других. Вот только незадача — у меня Linux. Погуглив ещё, я нашел несколько рецептов и путем несложного шаманства получил приемлемый результат.


Мой способ под катом.

Вам потребуется:

Linux с установленными:

  • x11vnc (всякие tigervnc и прочие я откровенно недолюбливаю)
  • adb из комплекта android-tools

Планшет/смарт с включенным режимом отладки и установленными:

  • AndroidNVC (у меня именно он, т.к. нет рекламы)
  • Какой нибудь блокировщик гашения экрана(без рекламы не нашел)
  • Любой автозагрузчик(запускать VNC и блокировщик) — необязательно(об этом ниже).

так, стартуем.

1. Получаем Modeline для xorg.conf

$ cvt 1024 768 25 # Можно и gtf, но он не всегда дает корректный modeline.

2. Редактируем

xorg.conf
Section "ServerLayout"
        Identifier     "Xorg Configured" 
        Screen         0  "Monitor" 0 0
        Screen         2  "Screen2" rightof "Screen0" # "Пустышка для VNC"
        Option         "Xinerama" "1"
	EndSection
	#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        # здесь все настройки оборудования, коли таковые есть
        #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	#Dummy видеокарта
	Section "Device"
		Identifier "Device2"
		Driver "dummy"
 		VideoRam 8000
	EndSection

	#Dummy монитор
	Section "Monitor"
 		Identifier "Monitor2"
  		Modeline "1024x768@25" 23.77 1024 1056 1144 1176 768 785 789 807 # см. п. 1
	EndSection 

	#Dummy экран
	Section "Screen"
 		Identifier "Screen2"
 		Device "Device2"
 		Monitor "Monitor2"
 		DefaultDepth 24
 		SubSection "Display"
	#разрешение плашета
    		Modes      "1024x768"
    		Virtual 1024 748
    	EndSubSection
	EndSection


Перезапускаем Х-сы и проверяем через arandr. Настраиваем расположение и ориентацию.Должно быть примерно так:



Сохраняем в файл — он нам пригодится.

3. Создаем файл для автозагрузки в WM/DE (у меня planshet.sh)

x11vnc -rfbport 5900 -display :0 -dontdisconnect -noxfixes -xdamage -shared -forever -clip 1024x768+1600+0 -scale 1024x768 -bg -cursor X -o /home/$USER/x11vnc.log -repeat
	xrandr --addmode VIRTUAL1 1024x768 # необязательно
	xrandr --output VIRTUAL1 --mode 1024x768 # необязательно
	xrandr --output VIRTUAL2 --off --output HDMI1 --off --output VIRTUAL1 --mode 1024x768 --pos 1602x0 --rotate normal --output DP1 --off --output VGA1 --mode 1600x900 --pos 0x0 --rotate normal #вот эта строка заимствована из сохраненного файла arandr

Проверим:

$ xrandr |grep VIRTUAL1
        VIRTUAL1 connected 1024x768+1600+0 (normal left inverted right x axis y axis) 0mm x 0mm

Так как в IceWM каталога автостарта нет, но есть файл ~/.icewm/startup(который должен быть исполняемым), добавим в него следующее:

sh -c /path/to/planshet.sh

4. Отключим гашение мониторов:

	xset s off
	xset s noblank
	xset -dpms

А теперь самое интересное! Как получить координаты «тапов» для устройства без «метода проб и ошибок» истязая клавиатуру в консоли?!

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



6. Допишем все это в planshet.sh

Полная версия
#!/bin/bash
       x11vnc -rfbport 5900 -display :0 -dontdisconnect -noxfixes -xdamage -shared -forever -clip 1024x768+1600+0 -scale 1024x768 -bg -cursor X -o /home/$USER/x11vnc.log -repeat
	xrandr --addmode VIRTUAL1 1024x768 # необязательно
	xrandr --output VIRTUAL1 --mode 1024x768 # необязательно
	xrandr --output VIRTUAL2 --off --output HDMI1 --off --output VIRTUAL1 --mode 1024x768 --pos 1602x0 --rotate normal --output DP1 --off --output VGA1 --mode 1600x900 --pos 0x0 --rotate normal  #вот эта строка заимствована из сохраненного файла arandr
	xset s off
	xset s noblank
	xset -dpms
	adb tcpip 5555
	adb connect 192.168.0.14:5555
	sudo adb devices
	adb shell input tap 1000 20 # тапаем по "квадратикам" в правом верхнем углу (не знаю, как нызавется) - скрин 3
	adb shell input tap 392 138 # тапаем по AndroidVNC
	adb shell input tap 20 65 # запускаем VNC предварительно прописав адрес и порт


И сделаем

chmod +x /path/to/planshet.sh

Вот, собственно, и все. Перезагружаем Х-сервер и получаем мультискрин.

У меня на «маленьком» крутится conky.

Скрин двойного экрана прилагается.



А еще я на него кидаю datasheet'ы, когда что-то моделирую.

UPD:
Выяснилась интересная особенность(Проверялось только в gentoo). Если стартовать БЕЗ /etc/X11/xorg.conf, то xrandr работает вполне корректно. А если создать хоть чуть «неправильный» xorg.conf(ну например, у меня «интеграшка» от Intel капризничает с параметром «AccelMethod» «sna») то получим отказ в сдвиге dummy экрана и ошибку xrandr. При этом подключенный второй монитор через DVI работает «как часы».
Так что можете спокойно генерить нужные разрешения с помощью xrandr не заботясь об отсутствующии ксорговского конфига.
Поделиться публикацией

Комментарии 35

    +11
    В параметрах разработчика есть опция — активный режим. Если её включить, то экран, при подключенных зарядке или компе, не будет выключаться. Сенсор не работает — подключи мышку через ATG и настрой.
      0

      Эмм… Вроде как OTG же?

        +9
        Ну — я старый, мне можно
        +2
        а если мышка по каким-либо причинам не работает, то можно эмулировать нажатия через
        adb shell input ...
        +4
        Заминусуют, меня, конечно, но поковырятся интересно, а с практической точки зрения — для даташитов можно 17-дюймовый монитор за косарь(а внутри мкада и ещё дешевле) купить, а планшет на запчасти за пятихат на авито продать.
          +3
          Хорошо вам в МСК, а вы на кубани попробуй что-нить купить по адекватной цене. У меня например про авито в Ростове сложилось впечатление что адекватные цены надо в красную книгу заносить.
            –7
            Получается, что не зря в фольклоре появился мем «кубаноиды». Помесь прижимистости хохлов и торгашестости джигитов :)
              0

              Да я в Оренбурге, и цены местные привел. Комиссионнок тоже нет?

              0

              На планшете может быть и Retina, чего точно не будет на мониторе за косарь.

              +4
              В теории можно отказаться от сети использовав примерно такой хак adb forward tcp:6100 tcp:7100 и работать без подключения сети на андроиде.
                0
                saintbyte, можете подробнее написать, как это сделать?
                И эта, кхм, на первый айпад можно так вывести изображение?
                  0
                  Боюсь что adb подходит только под андроид, а на айпаде насколько я помню иос.
                0
                Пост напомнил о проблеме. Друзья, нужны креативные идеи:
                  0

                  м?

                    0
                    НЛО удалило ссылочку на Тостер :(
                  0

                  У меня давно было желание сделать такое, но вот вопрос. Насколько сильно это все нагружает железо ПК?

                    0
                    Не скажу за всю связку, скажу за работу по vnc по сети.
                    Видео лучше смотреть на основном мониторе — vnc не для этого, хоть и можно (проверял во времена android 3.0 — получил порядка 4-6 фпс на окне в ~640x480, если правильно помню).
                    В остальном — должно быть нормально, по-моему. То есть, офисные задачи — практически как локально, если не через инет ходить, а через сеть предприятия хотя бы в 100Мбит.
                      0

                      И вместо Wi-Fi можно использовать режим USB-модема на планшете.

                      0
                      Не сильно.
                      Исходя из того, что «боевой» компьютер весьма жиденький по современным меркам(i3 CPU 530, 2Гб ОЗУ, Мать Н55Н-М с интеграшкой), даже не замечает «выхлоп» на экран-пустышку(в xorg.conf указано 8Мб видео памяти) «коньков»(conky) с нехилым таким набором скриптов на python(LUA, к сожалению, пока не освоил), то вполне разумное потребление.

                      0
                      Не оффтоп, но и не по содержимому поста.
                      Ни на что не намекаю, но… есть мак, айфон, айпад и приложение Duet Display, которое позволяет использовать последние два, как внешние дисплеи всего-лишь подключив их по кабелю к маку.
                      Дорого, но зато без вот этого всего.

                      А вообще, статья хорошая, благодарю :)
                        +1
                        есть мак, айфон, айпад и приложение Duet Display
                        Дорого, но зато без вот этого всего.
                        Думаю, эта статья про то, как дать устройству вторую жизнь, избежав при этом дополнительных трат. В данном случае, в качестве дополнительного дисплея.
                        +1
                        с нерабочим сенсором

                        Я уж по названию статьи думал вы тут Cintiq из планшета сделали.
                          0
                          А вот как бы добавить этот Dummy экран не записывая статически в xorg.conf автоопределённые настоящие видеокарту и монитор?
                            0
                            Создать соответствующий файл в /etc/X11/xorg.conf.d/
                            Вот только как быть с секцией ServerLayout, понятия не имею.
                              0
                              Очень интересно — потому что имею эту проблему на убунте =)
                                0
                                Рядом стоит второй комп. Могу попробовать на досуге решить этот вопрос через скрипты в /etc/X11/xorg.conf.d/. Там тоже gentoo, но Х-сы стартуют без файла xorg.conf.
                                  0
                                  Дак проблема в том что похоже Х определяют монитор и прочие прелести сами в процессе запуска и конфига просто нет.
                                    0
                                    ls /etc/X11/xorg.conf.d/
                                    20opengl.conf  90-monitor.conf  keyboard.conf  touchpad.conf

                                    cat /etc/X11/xorg.conf.d/90-monitor.conf
                                    Section "Monitor"
                                        Identifier             "StandardMonitor"
                                        DisplaySize            440 250    # В миллиметрах
                                    

                                    Ну и так далее.
                                    Вот только не очень понятно, что делать с секцией «ServerLayout». Возможно ли для нее создать конф я не знаю. Здесь написано, что можно. Вроде любую секцию можно там оформить файлом. Но у меня не сработало.
                                    Засим я предпочитаю создавать старый добрый xorg.conf и там все вписывать.
                                      0
                                      Насколько я понимаю, если есть вручную прописанный ServerLayout с вручную прописанным фальшивым монитором, то иксы не пытаются генерить ещё один ServerLayout с автоопределённым настоящим монитором.
                                        0
                                        Тут выяснилась интересная особенность. Если стартовать БЕЗ /etc/X11/xorg.conf, то xrandr работает вполне корректно. А если создать хоть чуть неправильный xorg.conf(ну например, у меня «интеграшка» капризничает с параметром «AccelMethod» «sna») то получим отказ в сдвиге экрана и ошибку xrandr.
                                        Так что можете спокойно генерить нужные разрешения с помощью xrandr не заботясь об отсутствующим ксорговсвим конфигом.
                              0
                              А подскажите, можно ли планшет использовать как экран для мониторинга (дашбордов и т.д.)
                                0
                                Это фактически второй монитор. Туда можно перетащить любое окно.
                                  0
                                  да, не совсем корректно задал вопрос. Интересует режим мультиоконности на одном экране, не разобрался пока это аппаратно должно поддерживаться или каким-лито софтом. Имею ввиду, что на экране часть занимают графики, рядом окно с другим приложением (биллинг, например)
                                    0
                                    Ну это видимо к тайловым менеджерам обращаться надо, а-ля Awesome/i3/пр… Несмотря на то, что мышью пользуюсь редко, я их недолюбливаю. Там еще и не такое можно.
                                0
                                Итак совет найдены готовые скрипты: github.com/brunodles/linux-second-screen
                                Для тех кто не хочет пускать девайс в сеть а любит USB: adb reverse tcp:5900 tcp:5900 но надо относительно свежый adb и андроид 5+
                                Если кто хочет крутить на андроиде еще и gpsd то есть приложение под андроид shared gps ( условно бесплатная )

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое