Как вы используете планшет Android в качестве второго дисплея?

Я заметил людей, использующих продукт для Windows и Mac под названием iDisplay, который позволяет вам использовать ваш Android или iPad в качестве дополнительного дисплея. Это кажется отличной идеей, и то, что можно сделать в Ubuntu. К сожалению, я понятия не имею, с чего начать.

Как вы можете воссоздать эту настройку в Ubuntu?

15 ответов

Решение

Получите клиент VNC для Android, запустите новый сеанс сервера VNC на своем компьютере (не просто делитесь текущим дисплеем - используйте vnc4server, а не x11vnc), подключитесь к нему из клиента VNC Android и (умный бит) поделитесь ПК клавиатура и мышь между двумя сеансами с помощью синергии.

Все необходимое программное обеспечение для этого доступно в стандартных репозиториях для Ubuntu, и на рынке доступно несколько бесплатных VNC-клиентов для Android.

Вы не сможете перетаскивать окна через дисплеи, используя этот метод. Для этого, я думаю, вам нужно использовать Xdmx для связи двух сессий. Это намного сложнее и, вероятно, приведет к потере 3D-ускорения.

Также имейте в виду, что synergy и vnc не используют шифрование по умолчанию, поэтому вам нужно туннелировать соединения, если вы не находитесь в доверенной сети.

Не могли заставить другие ответы работать, кроме этого, что связано без нареканий.

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

Вот пошаговое руководство, запрошенное в комментариях.

А. Учебное пособие

1. Создайте новый виртуальный монитор

Разрешение моего планшета 1280х1024. (Вы можете изменить 1280 а также 1024 везде в командах, если ваш планшет в другом разрешении. Вам также может понадобиться изменить LVDS1 если имя монитора по умолчанию другое).

Запустите в терминале:

  1. $ gtf 1280 1024 60,

В выводе есть строка, аналогичная Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync, Скопируйте все после слова Modeline (исключить его) в следующую команду.

  1. xrandr --newmode "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync

  2. xrandr --addmode VIRTUAL1 1280x1024_60.00

  3. xrandr --output VIRTUAL1 --mode 1280x1024_60.00 --left-of LVDS1

2. Запустите VNC

  1. x11vnc -clip 1280x1024+0+0

3. Подключите с помощью Android (LAN (Wi-Fi) или USB (кабель))

  1. Найдите IP вашего компьютера, используя ifconfig (при подключении из локальной сети).

  2. Загрузите приложение VNC и подключитесь к компьютеру, используя его IP (и выбрав порт 5900) в приложении.

Извещения

  • Кредиты: kjans, содержание отредактировано.
  • ВНИМАНИЕ: данные не зашифрованы! (Относится к использованию Wi-Fi и без локальной сети)
  • ВНИМАНИЕ: Любая сеть, к которой вы подключены, которая может достигнуть порта 5900, может подключаться к вашему монитору! (Не проблема при использовании USB и добавлении ограничивающего интерфейса -listen <IP_ADDR> возможность x11vnc (где <IP_ADDR> это адрес компьютера в сети, к которому вы хотите предоставить эксклюзивный доступ))
  • Выполнение любого из 1 - 4 шагов дважды может привести к ошибкам.
  • После успешного использования, 5. шаг должен быть повторен для другого соединения.

Б. Сценарий

Учебник реализован в виде скрипта (измените IP для использования с USB-кабелем ИЛИ удалите его и раскомментируйте строку для использования с Wi-Fi).

#!/bin/bash
W=1280
H=800
O=VIRTUAL1
if [ "$1" == "create" ]; then
    gtf $W $H 60 | sed '3q;d' | sed 's/Modeline//g' | xargs xrandr --newmode
    # sed: get third line, delete 'Modeline', get first word, remove first and last characters
    gtf $W $H 60 | sed '3q;d' | sed 's/Modeline//g' | awk '{print $1;}' | sed 's/^.\(.*\).$/\1/' | xargs xrandr --addmode $O
    gtf $W $H 60 | sed '3q;d' | sed 's/Modeline//g' | awk '{print $1;}' | sed 's/^.\(.*\).$/\1/' | xargs xrandr --output $O --left-of LVDS1 --mode
elif [ "$1" == "on" ]; then
    x11vnc -listen 192.168.42.149 -clip ${W}x${H}+0+0
    # For use in Wi-Fi LAN.
    #x11vnc -clip ${W}x${H}+0+0 #**WARNING** Unencrypted stream. VNC accessible without password through port 5900 in all internet interfaces.
else
    echo "missing argument: [create | on]"
fi

ТЛ; др: xrandr --fb а также x11vnc --clip вместе сделайте убийственный комбо.

В теме, связанной с узнаваемостью, есть очень интересная идея, я не уверен, имел ли он в виду это, потому что я не смог найти автора, которого он указал, а также потому, что я следил за сообщением на форуме, я опубликую это отдельно, а не как редактирование.:

  1. Во-первых, давайте предположим, что основной компьютер имеет разрешение экрана 1280x800, а дополнительный компьютер, на который вы хотите расширить рабочий стол до VNC, имеет разрешение экрана 1280x1024, и вы хотите, чтобы расширенный экран находился справа от основного экрана. Виртуальный экран должен быть 1280x800 + 1280x1024 = 2560x1024, (растяните его горизонтально и сделайте вертикальное разрешение больше) xrandr --fb 2560x1024,

  2. Теперь, когда экран больше, чем ваш основной монитор, вы должны убедиться, что нет панорамирования или любой другой нежелательной "функции", а также что координаты верхнего левого угла вашего основного монитора равны 0x0.

  3. x11vnc -clip 1280x1024+1281+0 плюс добавить любые другие варианты x11vnc по вкусу:)

Это должно быть так.

  1. устанавливать vnc4server а также x2x,
  2. Затем установите .vnc/xstartup Конфигурационный файл Моя выглядит так

    #!/bin/sh
    # Uncomment the following two lines for normal desktop:
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    # exec /etc/X11/xinit/xinitrc
    
    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    #vncconfig -iconic &
    #x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    #x-window-manager &
    exec gnome-session
    

    Он запускает рабочий стол gnome-fallback (я не знаю, как запустить gnome 3 в vnc).

  3. Чтобы запустить VNC-сервер, используйте vnc4server -geometry 800x480 команда. Конечно, вместо 800x480 вы должны установить разрешение вашего планшета.
  4. запуск x2x -east -to :1, Эта команда говорит, что ваш компьютер ведет себя так, как будто дисплей:1 был справа от экрана (используйте -west вариант, если вы хотите, чтобы он был слева). Вы не сможете перемещать приложения с одного дисплея на другой, но вы можете использовать одну мышь и одну клавиатуру для управления ими обоими.
  5. Подключитесь к дисплею, созданному с vnc4server с вашего планшета (номер порта 5900 + номер дисплея (например, для дисплея:1 номер порта будет 5901) (номер дисплея отображается на vnc4serverвыходной)).
  6. Для выхода из x2x, Нажмите Ctrl-C, Кроме того, вы можете запустить его в фоновом режиме (x2x -east -to :1 &). Тогда вам сначала нужно будет переместить его на передний план (fg) или убить его kill $! (будьте осторожны, это убивает последний процесс, запущенный в фоновом режиме).
  7. Чтобы удалить созданный дисплей, позвоните vnc4server -kill :1где вместо :1 Вы можете установить номер вашего нового дисплея.

Это в принципе возможно при использовании xdmx (распределенная мультиголовка X), которая позволяет создавать один рабочий стол с использованием двух X-серверов, работающих на разных компьютерах.

в принципе возможны три сценария, но ни один из них не является таким же плавным, как iDisplay, поскольку все они требуют как минимум перезапуска X-сессии. Я не смог заставить их работать идеально, но я использую Ubuntu 10.10 и не могу выполнить обновление по разным причинам. Три из них:

1: запустите X-сервер на Android (в магазине приложений доступно два) и используйте xdmx для объединения с дисплеем вашего компьютера или ноутбука. - у меня не сработало, потому что xdmx упал, когда указатель переместился на планшетную часть рабочего стола.

2: запустите второй X-сервер с бэкэндом vnc на своем компьютере, используйте xdmx, чтобы объединить его в один рабочий стол с экраном вашего компьютера, затем посмотрите на виртуальную часть с помощью средства просмотра vnc на планшете - у меня не получилось, потому что xdmx требует, чтобы все x-серверы имели одинаковую цветную визуализацию, что не относится к vncserver и реальному дисплею, и я не смог убедить vncserver измениться.

3: запустите два vncservers, по одному для каждого экрана, затем соедините их с xdmx и посмотрите на каждую часть с vncviewer на соответствующей машине. - Это было ближе всего к работе у меня, к сожалению, ввод был испорчен. это было также довольно медленно в истинном цвете по Wi-Fi. Я использовал этот скрипт для запуска xdmx и vncs:

#!/bin/sh 
vncserver :2 -geometry 1024x768 -depth 24 && \
vncserver :3 -geometry 1920x1120 -depth 24 && \
startx -- \
/usr/bin/X11/Xdmx :1 \
-input :2 \
-display :2 \
-display :3 \
-ignorebadfontpaths \
-norender \
-noglxproxy \
+xinerama \
-nomulticursor
vncserver -kill :2 
vncserver -kill :3

YMMV

Просто хотел добавить, что если вы хотите улучшить соединение между вашим устройством Android и компьютером, вы можете использовать USB:

Убедитесь, что вы включили отладку по USB ( https://developer.android.com/studio/debug/dev-options)

Затем установите adb через sudo apt-get install android-tools-adb

Затем, если ваш VNC-сервер работает на вашем компьютере через порт 5900, используйте adb с:

adb обратный tcp:5900 tcp:5900

Таким образом, порт 5900 вашего компьютера также будет доступен на вашем устройстве Android через localhost:5900 поэтому настройте свой клиент Android VNC для подключения к localhost:5900 вместо того your-computer-IP-addres:5900

Я сделал простой bash-скрипт, чтобы сделать планшет вторым дисплеем. копия ipad_monitor.sh (Не волнуйтесь. Это также работает с Android) в моем блоге.

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

Изменить: я включил оригинал ipad_monitor.sh Вот. выполните эту команду как:

  • ./ipad_monitor.sh --right или же ./ipad_monitor.sh --left
  • ./ipad_monitor.sh --right --portrait
  • ./ipad_monitor.sh --right --portrait --hidpi

Основная идея этого скрипта такая же, как и у других, работает xrandr а также x11vnc но я включил параметры, например, с какой стороны вы хотите прикрепить экран.

#!/bin/sh
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42):
# <k.bumsik@gmail.com> wrote this file. As long as you retain this notice you
# can do whatever you want with this stuff. If we meet some day, and you think
# this stuff is worth it, you can buy me a beer in return. - Bumsik Kim
# ----------------------------------------------------------------------------

# Configuration
WIDTH=1024  # 1368 for iPad Pro
HEIGHT=768  # 1024 for iPad Pro
MODE_NAME="mode_ipad"       # Set whatever name you like, you may need to change
                            # this when you change resolution, or just reboot.
DIS_NAME="VIRTUAL1"         # Don't change it unless you know what it is
RANDR_POS="--right-of"      # Default position setting for xrandr command

# Parse arguments
while [ "$#" -gt 0 ]; do
  case $1 in
    -l|--left)      RANDR_POS="--left-of"  ;;
    -r|--right)     RANDR_POS="--right-of" ;;
    -a|--above)     RANDR_POS="--above"    ;;
    -b|--below)     RANDR_POS="--below"    ;;
    -p|--portrait)  TMP=$WIDTH; WIDTH=$HEIGHT; HEIGHT=$TMP
                    MODE_NAME="$MODE_NAME""_port"  ;;
    -h|--hidpi)     WIDTH=$(($WIDTH * 2)); HEIGHT=$(($HEIGHT * 2))
                    MODE_NAME="$MODE_NAME""_hidpi" ;;
    *) echo "'$1' cannot be a monitor position"; exit 1 ;;
  esac
  shift
done

# Detect primary display
PRIMARY_DISPLAY=$(xrandr | perl -ne 'print "$1" if /(\w*)\s*connected\s*primary/')

# Add display mode
RANDR_MODE=$(cvt "$WIDTH" "$HEIGHT" 60 | sed '2s/^.*Modeline\s*\".*\"//;2q;d')
xrandr --addmode $DIS_NAME $MODE_NAME 2>/dev/null
# If the mode doesn't exist then make mode and retry
if ! [ $? -eq 0 ]; then
  xrandr --newmode $MODE_NAME $RANDR_MODE
  xrandr --addmode $DIS_NAME $MODE_NAME
fi

# Show display first
xrandr --output $DIS_NAME --mode $MODE_NAME
# Then move display
sleep 5 # A short delay is needed. Otherwise sometimes the below command is ignored.
xrandr --output $DIS_NAME $RANDR_POS $PRIMARY_DISPLAY

# Cleanup before exit
function finish {
  xrandr --output $DIS_NAME --off 
  xrandr --delmode $DIS_NAME $MODE_NAME
  echo "Second monitor disabled."
}

trap finish EXIT

# Get the display's position
CLIP_POS=$(xrandr | perl -ne 'print "$1" if /'$DIS_NAME'\s*connected\s*(\d*x\d*\+\d*\+\d*)/')
echo $CLIP_POS
# Share screen
x11vnc -multiptr -repeat -clip $CLIP_POS
# Possible alternative is x0vncserver but it does not show the mouse cursor.
#   x0vncserver -display :0 -geometry $DIS_NAME -overlaymode -passwordfile ~/.vnc/passwd
if ! [ $? -eq 0 ]; then
  echo x11vnc failed, did you \'apt-get install x11vnc\'?
fi

TL; DR:

    $ sudo apt-get install x11vnc
    $ WINDOW_ID=$(xwininfo | awk '/Window.id/{print $4}') && x11vnc -viewonly -nopw -avahi -id $WINDOW_ID >/dev/null 2>&1 &

Теперь просто нажмите на окно, которым вы хотите поделиться.


ПОЛНЫЙ:

У меня есть iPad и Chromebook, и я хотел бы использовать их в качестве своих мониторов, просто чтобы использовать некоторые команды терминала htop, iptstate, nmon,так далее. Итак, я ленивый парень и сделал это с помощью:

  1. Установка пакета: sudo apt-get install x11vnc
  2. Откройте какой-нибудь терминал и поставьте xwininfo | awk '/Window.id/{print $4}' и нажмите в окне, которым вы хотите поделиться. Результат будет примерно таким:

    $ xwininfo | awk '/Window.id/{print $4}'
    0x4402f34
    
  3. Теперь вы можете начать свой x11vnc сессия:

    $ x11vnc -viewonly -nopw -avahi -id 0x4402f34 >/dev/null 2>&1 &
    
  4. Измените размер окна (0x4402f34), чтобы получить максимально возможное изображение.

Запомните связанный порт вашего сеанса: 5900 -> :0, 5901 -:1, 5902 -> :2...

Кроме того, отлично работает с приложениями X11: Firefox, OpenOffice и т. Д.

Я использую фиктивный драйвер xorg и x11vnc -clip. Точка мыши не застряла на краю.

sudo apt-get install xserver-xorg-video-dummy

Здесь /etc/X11/xorg.conf для заглушки на втором экране:

Раздел "Устройство"
        Идентификатор "Настроенное видеоустройство"
    Водитель "Radeon" # ИЗМЕНИТЬ ЭТО
EndSection

Раздел "Монитор"
        Идентификатор "Настроенный монитор"
EndSection

Раздел "Экран"
        Идентификатор "Экран по умолчанию"
        Монитор "Настроенный монитор"
        Устройство "Настроенное видеоустройство"
EndSection


##Xdummy:##
Раздел "Устройство"
  Идентификатор "Видеокард0"
  Водитель "пустышка"
  #VideoRam 4096000
  VideoRam 256000
EndSection

##Xdummy:##
Раздел "Монитор"
  Идентификатор "Монитор0"
# HorizSync 10.0 - 300.0
# VertRefresh 10.0 - 200.0
# DisplaySize 4335 1084
EndSection

##Xdummy:##
Раздел "Экран"
  Идентификатор "Screen0"
  Устройство "Видеокард0"
  Монитор "Монитор0"
EndSection



Раздел "ServerLayout"
  Идентификатор "dummy_layout"
  Экран 0 "Экран по умолчанию"
  Экран 1 "screen0" справа от "Экран по умолчанию"
    Вариант "Xinerama" "1"
EndSection

Затем войдите в X сессию и запустите:

x11vnc -clip 1024x768+1280+0

Использовать https://github.com/mrenrich84/vnc_virtual_display_linker

Инструмент настраивает второй виртуальный монитор для соединения с VNC, как описано во многих предыдущих ответах. Он даже поддерживает подключения устройств Android с помощью USB-кабеля.

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

  1. Приобретите «Адаптер безголового дисплея»; Пакет-пустышка Xorg мне не помог. Возможно, из-за NVIDIA, и через 3 часа не было четкого решения. Итак, я приобрел в Интернете одно из этих фиктивных устройств HDMI. Найдите «фиктивный HDMI».

  1. Установите приложение VNC на Android; Я использую приложение «bVNC Free», которое работает хорошо и просто.

  2. Возьмите кабели; Если на обоих устройствах есть порты Type-C, приобретите кабель для подключения портов.

  3. Включить режим разработчика на устройстве Android;

  4. Установите необходимые пакеты x11 и adb на устройство Ubuntu;

           sudo apt update
     sudo apt install android-tools-adb x11-xserver-utils x11vnc
  1. Настройте приложение VNC на Android; Использовать127.0.0.1для настроек подключения VNC IP и порт5901. Все остальное по умолчанию.

  2. Получите отображаемое имя фиктивного HDMI, используяxrandr; Один дисплей должен быть основным, а другой — фиктивным. У меня был «HDMI-A-0»;

      xrandr | grep ' connected'
  1. Для начала запустите скрипт ниже; Его необходимо запустить на терминале. Его можно сохранить в исполняемом файле.shфайл, чтобы облегчить запуск каждый раз.
          #!/bin/bash
    
    #Set screen resolution and display name
    resh=1920;
    resv=1080;
    dummy="HDMI-A-0";
    
    #Define mode and mode resolutions
    mode=$(cvt $resh $resv | grep "Modeline" | xargs | sed 's/Modeline //' | sed 's/\.00//');
    moderes=$(echo $mode | awk '{print $1;}');
    
    #Reset and kill all existing processes
    adb kill-server
    xrandr --output $dummy --off
    xrandr --delmode $dummy $moderes
    xrandr --rmmode $moderes
    killall -9 x11vnc
    
    #Start adb, set xrandr and start x11vnc
    adb reverse tcp:5901 tcp:5901 &
    sleep 5
    adb shell monkey -p com.iiordanov.freebVNC -c android.intent.category.LAUNCHER 1 &
    sleep 5
    xrandr --newmode $mode
    xrandr --addmode $dummy $moderes 
    xrandr --output $dummy --mode $moderes
    x11vnc -bg -clip "${resh}x${resv}+0+0" -rfbport 5901 2>/dev/null 1>&2

    #Notify and exit
    echo "VNC ready; Open VNC app to use. This window closes in 10 seconds.";
    notify-send "VNC ready";
    sleep 10
    exit;
  1. Когда все будет готово, откройте приложение VNC и откройте сохраненное соединение. Он должен показать второй дисплей. Используя диспетчер дисплея Ubuntu, положение второго дисплея можно немного изменить. Больше возможностей для экспериментов.

Для тех, кто все еще интересуется этой темой: клип xrandr и x11vnc работает; чтобы включить мышь, вам нужно использовать аргумент панорамирования, чтобы установить область отслеживания мыши:

xrandr --fb 2560x1024 --output LVDS1 --panning 1280x1024+0+0/2560x1024+0+0

Тогда при запуске xvnc используйте:

x11vnc -clip 1280x1024+1281+0 -nocursorshape -nocursorpos

Это останавливает VNC от попытки использовать собственное отслеживание курсора и рисует курсор как часть изображения на экране.

Я сделал заметки здесь http://mikescodeoddities.blogspot.ae/2015/04/android-tablet-as-second-ubuntu-screen.html

Эти инструкции предназначены для создания "дополнительного" экрана для вашей машины linux с помощью планшета или любого компьютера через клиент VNC.

Я сделал эти шаги в Mageia3 32Bit (не пробовал 64bit), но должен быть похожим и для других дистрибутивов (например, Ubuntu).

Убедитесь, что у вас есть все необходимые пакеты с помощью следующей команды терминала:

sudo apt-get install gcc autoconf automake x11-font-util libtool libxi-devel ibopenssl-devel libxfont1-devel libpam-devel x11-util-macros x11-xtrans-devel x11-server-xvfb x11-server-xdmx x11-server-devel x11-server-source

Когда у вас есть все вышеперечисленные пакеты, выполните следующие команды:

cd /usr/share/x11-server-sources/
./autogen.sh
./configure --with-fontrootdir=/usr/share/fonts --with-xkb-path=/usr/share/X11/xkb --with-xkb-output=/usr/share/X11/xkb/compiled --enable-dmx
make

Если вы не получили никаких ошибок, исправьте Xdmx (проще говоря, он "сломался" в течение некоторого времени):

открыть /usr/share/x11-server-sources/hw/dmx/input/dmxevents.cи измените строку 730: измените это:

POINTER_ABSOLUTE | POINTER_SCREEN, &mask);

к этому:

POINTER_RELATIVE | POINTER_DESKTOP, &mask);

Если строка 730 отличается, используйте этот раздел, чтобы найти правильную строку: Orginal section - строка для изменения, помеченная *

    case ButtonPress:
    case ButtonRelease:
        detail = dmxGetButtonMapping(dmxLocal, detail);
        valuator_mask_zero(&mask);
        QueuePointerEvents(p, type, detail,
 *                         POINTER_RELATIVE | POINTER_DESKTOP, &mask);
        return;

Проверьте свою версию Xdmx, запустив ./configure --version в /usr/share/x11-server-source/, для Xdmx 1.13 и старше вы также должны внести эти изменения (для 1.14 и новее вы можете пропустить шаг "make" ниже):

открыть /usr/share/x11-server-sources/dix/getevents.cстрока 1395: изменить это:

if (flags & POINTER_SCREEN ) {    /* valuators are in screen coords */

К этому:

if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) {    /* valuators are in screen coords */

(Исходный раздел - строка для изменения отмечена *)

    /* valuators are in driver-native format (rel or abs) */

    if (flags & POINTER_ABSOLUTE) {
*       if (flags & POINTER_SCREEN ) {    /* valuators are in screen coords */
            sx = valuator_mask_get(&mask, 0);
            sy = valuator_mask_get(&mask, 1);

открыть /usr/share/x11-server-sources/Xext/xtest.cстрока 311: изменить это:

flags = POINTER_ABSOLUTE | POINTER_SCREEN;

к этому:

flags = POINTER_ABSOLUTE | POINTER_DESKTOP;

(оригинальный раздел - строка для изменения отмечена *)

       case MotionNotify:
            dev = PickPointer(client);
            valuators[0] = ev->u.keyButtonPointer.rootX;
            valuators[1] = ev->u.keyButtonPointer.rootY;
            numValuators = 2;
            firstValuator = 0;
            if (ev->u.u.detail == xFalse)
*               flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
            break;

/usr/share/x11-server-sources/include/input.h, строка 73: добавить эту строку после строки, начинающейся с #define POINTER_EMULATED:

#define POINTER_DESKTOP         (1 << 7)

После внесения вышеуказанных изменений, повторно выполните (в /usr/share/x11-server-sources/):

make

У вас должен быть новый файл Xdmx в /usr/share/x11-server-sources/hw/dmx/, Нам нужно установить его глобально для простоты, поэтому я рекомендую переименовать существующий:

sudo mv /bin/Xdmx /bin/Xdmx-old

и скопируйте новый вместо него:

cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin

Теперь вы готовы выполнить первую пробную версию. Следующие команды позволяют сохранить основной / существующий дисплей (:0) запустить и открыть новый дисплей с поддержкой нескольких мониторов. Я использую icewm с этими командами, чтобы сделать его немного более легким (я использую KDE на моем основном дисплее :0 и откройте любое приложение с большим количеством мониторов на новом дисплее с несколькими головками). Вы можете определенно написать эти команды для простоты использования (это то, что я сделал). Любая из этих команд может быть выполнена в окне консоли и / или терминала любого дисплея, единственное требование - чтобы они выполнялись по порядку.

Эта команда создает ваш новый дисплей как буфер кадров для вашего дисплея VNC :2 (отрегулируйте размер экрана по желанию):

Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &

Это начинает новый легкий сеанс X на вашем физическом дисплее в качестве дисплея :1 (есть разные способы сделать это):

startx 'icewm' -- :1

Эта команда запускает мультидисплей между вашим физическим экраном и виртуальным экраном и запускает icewm для оконного менеджера:

Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm

Теперь откройте окно терминала и запустите сервер vnc (измените пароль по желанию):

x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &

Теперь остается только запустить клиент VNC и подключиться к нему - вам может потребоваться отключить или добавить исключение для брандмауэра для порта 5900, чтобы вы могли подключиться к нему. Следует также помнить, что некоторые клиенты VNC не отображают положение удаленного курсора. Я подтверждаю, что "Mocha VNC" для iOS отлично работает, если отключить опцию "локальная мышь".

Наслаждайтесь перетаскиванием окон между вашим основным монитором и вашим новым виртуальным вторым монитором (при этом вы также можете использовать планшет, чтобы нажимать / вводить текст на втором мониторе).

Чтобы закрыть Xdmx, дважды нажмите Ctrl+Alt+Backspace.

Автоматизация:

Я использую этот bash-скрипт для запуска всего процесса (также убивает Xvfb при выходе):

Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill

Тогда у меня есть обычай ~/.xinitrc файл с этим:

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

if [[ $1 == "" ]]
then
  exec startkde 
elif [[ $1 == "xterm" ]]
then
  exec xterm
elif [[ $1 == "dual" ]]
then
  exec Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm & x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe
else
  exec $1
fi

Поиск проблемы:

  • При запуске Xdmx, если вы получаете сообщение об ошибке sh: /usr/local/bin/xkbcomp: No such file or directory вам может понадобиться выполнить: cd /usr/local/bin" and "ln -s /bin/xkbcomp, затем попробуйте Xdmx снова.

  • Ctrl+Alt+F1 через F7 должен работать в Xdmx для переключения на другие консоли /xsessions, но по какой-то причине это не работает, я просто выполняю команду sudo chvt X (где X - номер консоли / xsession), чтобы переключиться на мой основной дисплей. Также, когда вы переключаетесь обратно на Xdmx, вы можете столкнуться с некоторыми проблемами при рисовании в любых открытых окнах, я просто нажимаю на панели задач, чтобы скрыть / показать окно снова, вызывая перерисовку.

У меня было много проблем с другими методами, перечисленными здесь. Хотелось бы, чтобы у меня было лучшее решение, но мое медленное и простое решение - хорошая отправная точка.

Для сервера VNC я попробовал vncserver пакет, но экран станет черным, и мне придется перезагрузить gdm чтобы что-нибудь снова заработало. Я перешел на tightvncserver и он работал в первый раз без конфигурации.

Чтобы разделить мышь / клавиатуру между экранами, я использовал x2vnc. Это также можно использовать с win2vnc для совместного использования мыши / клавиатуры с ПК с Windows рядом с ПК с Linux.

Финальные команды:

sudo apt-get install tightvncserver
tightvncserver
sudo apt-get install x2vnc
x2vnc -east localhost:1

На этом этапе вы сможете открыть второй экран в программе VNC, подключившись к YOUR_IP_ADDRESS:1, Чтобы запустить программу на экране VNC, откройте терминал, установите DISPLAYи затем выполните команду. Например, чтобы открыть xterm на VNC "Экран" запустите:

export DISPLAY=:1
xterm

При таком подходе второй экран довольно медленный. Тем не менее, многие другие варианты, которые я пробовал, зашли в тупик, и этот работал вообще без конфигурации.

Спасибо за уроки, ребята, я поделюсь с вами тем, что сработало для меня в Ubuntu 14.04.

Загрузите AndroidVNC здесь для своего планшета

Получите x11vnc для вашего компьютера с Ubuntu, запустив

sudo apt-get install x11vnc

Я должен был использовать метод Xorg Dummy Driver. Вот как выглядит мой файл /etc/X11/xorg.conf:

Section "ServerLayout"
Identifier     "X.org Configured"
Screen      0  "Screen0" 0 0
**Screen        1  "Screen1" rightof "Screen0"**
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
**Option         "Xinerama" "1"**
EndSection

Section "Files"
ModulePath   "/usr/lib/xorg/modules"
FontPath     "/usr/share/fonts/X11/misc"
FontPath     "/usr/share/fonts/X11/cyrillic"
FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath     "/usr/share/fonts/X11/Type1"
FontPath     "/usr/share/fonts/X11/100dpi"
FontPath     "/usr/share/fonts/X11/75dpi"
FontPath     "built-ins"
EndSection

Section "Module"
Load  "glx"
EndSection

Section "InputDevice"
Identifier  "Keyboard0"
Driver      "kbd"
EndSection

Section "InputDevice"
Identifier  "Mouse0"
Driver      "mouse"
Option      "Protocol" "auto"
Option      "Device" "/dev/input/mice"
Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
Identifier   "Monitor0"
VendorName   "Monitor Vendor"
ModelName    "Monitor Model"
DisplaySize 1680 1050
EndSection

**Section "Monitor"
Identifier "Monitor1"
VendorName "Dummy"
ModelName "Dummy"
DisplaySize 2704 1050
EndSection**

Section "Device"
    ### Available Driver options are:-
    ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
    ### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
    ### <percent>: "<f>%"
    ### [arg]: arg optional
    #Option     "NoAccel"               # [<bool>]
    #Option     "SWcursor"              # [<bool>]
    #Option     "EnablePageFlip"        # [<bool>]
    #Option     "ColorTiling"           # [<bool>]
    #Option     "ColorTiling2D"         # [<bool>]
    #Option     "RenderAccel"           # [<bool>]
    #Option     "SubPixelOrder"         # [<str>]
    #Option     "AccelMethod"           # <str>
    #Option     "EXAVSync"              # [<bool>]
    #Option     "EXAPixmaps"            # [<bool>]
    #Option     "ZaphodHeads"           # <str>
    #Option     "EnablePageFlip"        # [<bool>]
    #Option     "SwapbuffersWait"       # [<bool>]
Identifier  "Card0"
Driver      "radeon"
BusID       "PCI:1:0:0"
EndSection

**Section "Device"
  Identifier "Dummy"
  Driver "dummy"
EndSection**

Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor    "Monitor0"
SubSection "Display"
    Viewport   0 0
    Depth     1
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     4
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     8
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     15
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     16
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     24
EndSubSection
EndSection

**Section "Screen"
Identifier "Screen1"
Device "Dummy"
Monitor "Monitor1
EndSection**

Вам, вероятно, там не понадобится все, просто запустите X -configure, чтобы получить автоматическую настройку системы и добавить фиктивные разделы (между звездочками) в ваш файл. Разрешение для фиктивного экрана в xorg.conf должно соответствовать ширине вашего основного монитора + разрешающей способности вашего планшета, в моем случае 1680+1024=2704, сохраняйте высоту основного монитора, в моем случае - 1050. Перезагрузите X-сервер / перезагрузите / выньте вилку питания, что угодно подходит вам больше:).

Запустите x11vnc, выполнив

x11vnc -rfbauth ~/.vnc/passwd -clip 1024x550+1680+0

Здесь разрешением должна быть ширина вашего планшета х высота планшета + ширина основного дисплея + 0

Подключитесь к своему ПК с помощью клиента androidVNC, обязательно включите опцию localmouse. Так и должно быть, теперь почувствуй странность запуска linux на Android:)

Другие вопросы по тегам