Jak używasz tabletu z Androidem jako drugiego wyświetlacza?


63

Zauważyłem, że ludzie używają produktu dla systemu Windows i Mac o nazwie iDisplay, który pozwala używać Androida lub iPada jako dodatkowego wyświetlacza. Wydaje się, że to świetny pomysł i coś, co można zrobić na Ubuntu. Niestety nie mam pojęcia, jak zacząć.

Jak możesz ponownie utworzyć tę konfigurację na Ubuntu?


2
Podobne pytanie obecnie dyskutowane na forach: Użyj VNC jako drugiego monitora
ændrük

1
To samo pytanie na temat
superużytkownika

1
Ok, przedstawione tutaj rozwiązania są sieciowe. Ale czy jest jakaś szansa na osiągnięcie tego poprzez po prostu sfałszowanie monitora przez USB, aby uzyskać takie same wrażenia jak monitor, tak jak Duet ?
Augustin Riedinger

Tak więc Duet może (zasadniczo) emulować układ DisplayLink w oprogramowaniu - nie wiem, ale tak sądzę. Nawet bym nie spróbował. To, czego bym spróbował (i nie jest to trudne), to połączenie sieciowe USB: tethering (lub tethering wsteczny) na tablecie i poza siecią.
chx

Odpowiedzi:


28

Zdobądź klienta VNC dla Androida, uruchom nową sesję serwera VNC na swoim komputerze (nie udostępniaj tylko bieżącego ekranu - użyj vnc4server, a nie x11vnc), połącz się z nim z klienta Android VNC i (sprytny bit) udostępnij Klawiatura komputerowa i mysz pomiędzy dwiema sesjami za pomocą synergii.

Całe oprogramowanie potrzebne do tego jest dostępne w standardowych repozytoriach po stronie Ubuntu, a na rynku dostępnych jest kilka bezpłatnych klientów VNC dla Androida.

Przy użyciu tej metody nie będzie można przeciągać okien między ekranami. W tym celu myślę, że musiałbyś użyć Xdmx do połączenia dwóch sesji. Jest to o wiele trudniejsze i prawdopodobnie spowoduje utratę przyspieszenia 3D.

Należy również pamiętać, że synergia i vnc nie używają domyślnie szyfrowania, więc musisz tunelować połączenia, jeśli nie jesteś w zaufanej sieci.


9
możesz dodać przykład
rkmax,

18
użyteczny byłby krok po kroku przykład, który możemy naśladować
OganM,

2
Jak sprawiłoby to, że tablet byłby drugim ekranem - tak jak na większej powierzchni ekranu?
NoBugs

Miałem problemy z vncserver i Gnome 3. Za każdym razem, gdy próbowałem uruchomić vncserver, ekran stawał się czarny. Skończyło się na tym, że używałem tightvncserver (także w repozytoriach Ubuntu) i zadziałało to za pierwszym razem, zupełnie bez konfiguracji.
trzecient

To bardziej rozwiązanie KVM lub rozwiązanie do zdalnego sterowania niż drugi wyświetlacz. Tak, daje inny zestaw danych wejściowych, ale dane wyjściowe są takie same na obu urządzeniach - nie można nawet przełączyć tabletu na inny wirtualny pulpit niż ekran główny, włączenie jednego przełącza oba. To nie odpowiada na pytanie. Pytanie dotyczy korzystania z urządzeń mobilnych w celu uzyskania dodatkowej przestrzeni wyjściowej, a nie wprowadzania danych w ogóle.
cprn

17

tl; dr: xrandr --fbi x11vnc --cliprazem tworzą zabójczą kombinację.

Wątek powiązany przez rozpoznanie ma naprawdę ciekawy pomysł, nie jestem pewien, czy miał na myśli ten, ponieważ nie mogłem znaleźć autora, którego wskazał, a także ponieważ śledziłem tam post na forum, opublikuję go osobno, a nie jako edycję :

  1. Po pierwsze, załóżmy, że główny komputer ma rozdzielczość ekranu 1280 x 800, a drugi komputer, na którym chcesz rozszerzyć pulpit ponad VNC, ma rozdzielczość 1280 x 1024 i chcesz, aby ekran rozszerzony znajdował się po prawej stronie ekranu głównego. Wirtualny ekran musi być 1280x800 + 1280x1024 = 2560x1024. (rozciągnij go w poziomie i zwiększ rozdzielczość pionową) Uruchom więc xrandr --fb 2560x1024.

  2. Teraz, gdy ekran jest większy niż główny monitor, musisz upewnić się, że nie jest włączone panoramowanie ani żadna inna niepożądana „funkcja”, a także że współrzędne lewego górnego rogu głównego monitora wynoszą 0x0.

  3. x11vnc -clip 1280x1024+1281+0 plus dodaj dowolne inne opcje x11vnc do smaku :)

To powinno być to.


2
To wydaje się być bardziej płynnym sposobem na zrobienie tego niż sztuczka Synergy, fajnie! Jestem jednak ciekawy, jak dodatkowa przestrzeń wirtualna będzie współdziałać z moim menedżerem okien kafelkowych. Za chwilę to spróbuję i zdam raport.
Ibrahim

2
Porażka wyrwana z paszczy zwycięstwa. Wskaźnik myszy nie może opuścić głównego ekranu. :(
Gringo Suave

1
Wygląda interesująco. Właściwie udało mi się tam mieć podwójny ekran, ale niestety polecenie xrandr --fb 2560x1024wydaje się nie mieć żadnego efektu. Co oznacza, że ​​nie mogę mieć większego ekranu niż mój główny monitor ... :(
Augustin Riedinger

1
Przeczytałem o tym dalej . Wystąpił X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 18 (RRAddOutputMode) Serial number of failed request: 29 Current serial number in output stream: 30 błąd. Domyślam się, że mój laptop nie obsługuje wyższej rozdzielczości niż natywna 1600*900. Oznacza to, że to rozwiązanie nie może działać. Zamiast tego będę musiał znaleźć rozwiązanie z podwójnym ekranem.
Augustin Riedinger,

3
W końcu udało mi się to uruchomić dzięki temu postowi , uruchamiając: sudo xrandr --fb 2732x768 --output LVDS1 --panning 2732x768+0+0/2732x768+0+0(brakowało mi --panningopcji)
Augustin Riedinger

16

Nie można sprawić, by pozostałe odpowiedzi działały, z wyjątkiem tego , które łączyło się bezbłędnie.

Pozwala używać Androida jako drugiego monitora, współdzielić mysz, przeciągać okna między tabletem a komputerem.

Oto samouczek krok po kroku, wymagany przez komentarze.

A. Samouczek

1. Utwórz nowy wirtualny monitor

Rozdzielczość mojego tabletu to 1280x1024. (Możesz zmienić 1280i 1024wszędzie w poleceniach, jeśli tablet ma inną rozdzielczość. Może być także konieczna zmiana, LVDS1jeśli domyślna nazwa monitora jest inna).

Uruchom w terminalu:

  1. $ gtf 1280 1024 60.

Wyjście zawiera linię podobną do Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync. Skopiuj wszystko po słowie Modeline(wyklucz je) do następnego polecenia.

  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. Uruchom VNC

  1. x11vnc -clip 1280x1024+0+0

3. Połącz z Androidem (LAN (Wi-Fi) lub USB (kabel))

  1. Znajdź adres IP komputera za pomocą ifconfig(podczas łączenia z sieci LAN).

  2. Pobierz aplikację VNC i połącz się z komputerem za pomocą adresu IP (i wybierając port 5900) w aplikacji.

Powiadomienia

  • Kredyty: kjans , treść poddana edycji.
  • OSTRZEŻENIE : Dane są niezaszyfrowane! (Dotyczy użycia Wi-Fi i nie-LAN)
  • OSTRZEŻENIE : Każda podłączona sieć, która może osiągnąć port 5900, może połączyć się z monitorem! (Nie ma problemu, jeśli używasz USB ORAZ ograniczając -listen <IP_ADDR>opcję dodawania interfejsu do x11vnc(gdzie <IP_ADDR>jest adres komputera w sieci, do którego chcesz dać wyłączny dostęp))
  • Dwukrotne wykonanie jednego z kroków 1-4 może powodować błędy.
  • Po udanym użyciu 5. krok należy powtórzyć dla innego połączenia.

B. Skrypt

Samouczek zaimplementowany jako skrypt (Zmień adres IP do użycia z kablem USB LUB usuń go i odkomentuj linię do użycia z 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

@Prometheus, x11vnc -clip 1280x1024+0+0można go zastąpić x11vnc -clip xinerama1. Ponadto --left-of LVDS1nie jest to absolutnie konieczne, jeśli zamierzasz użyć Monitorsaplikacji do ustawiania dodatkowego monitora w dowolnym miejscu.
LeoRochael

6
xrandr: cannot find output "VIRTUAL1"został zwrócony, gdy wpisałem numer 3. Jakieś pomysły?
dat tutbrus

3
xrandr: cannot find output "VIRTUAL1"wrócił zxrandr --addmode VIRTUAL1 1280x800_60.00
Tooniis

To działa, z tym wyjątkiem, że aby to działało, musisz mieć nieużywane wyjście zdolne do docelowego trybu wideo. VIRTUAL1wydaje się być symbolem zastępczym dla takiego wyjścia, a nie czymś obecnym w typowym systemie.
Ruslan

1
@cprn Tak, możesz udostępniać kursor myszy i przeciągać okna. To tak, jakbyś miał podłączony drugi monitor
Elijas

13
  1. Zainstaluj vnc4serveri x2x.
  2. Następnie skonfiguruj .vnc/xstartupplik konfiguracyjny. Mój wygląda tak

    #!/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
    

    Uruchamia gnome-fallback desktop (nie wiem, jak uruchomić gnome 3 w vnc).

  3. Aby uruchomić serwer VNC, użyj vnc4server -geometry 800x480polecenia. Oczywiście zamiast 800x480 musisz ustawić rozdzielczość swojego tabletu.
  4. Uruchom x2x -east -to :1. To polecenie mówi, że komputer działa tak, jakby wyświetlał: 1 znajdował się po prawej stronie ekranu (użyj -westopcji, jeśli chcesz, aby był po lewej stronie). Nie będziesz mógł przenosić aplikacji z jednego ekranu na inny, ale możesz używać jednej myszy i jednej klawiatury do sterowania nimi obiema.
  5. Połącz się z wyświetlaczem utworzonym za pomocą vnc4servertabletu (numer portu to 5900 + numer wyświetlacza (np. Dla wyświetlacza: 1 numer portu to 5901) (numer wyświetlacza jest wyświetlany na vnc4serverwyjściu)).
  6. Aby wyjść z x2x, naciśnij Ctrl-C. Alternatywnie możesz uruchomić go w tle ( x2x -east -to :1 &). Następnie musisz najpierw przenieść go na pierwszy plan ( fg) lub zabić go kill $!(bądź ostrożny, zabija ostatni proces uruchomiony w tle).
  7. Aby usunąć utworzony wyświetlacz, zadzwoń vnc4server -kill :1, gdzie zamiast :1ciebie możesz ustawić numer nowego wyświetlacza.

1
Dzięki za x2x ... Dlaczego nikt nie wspomina o tym w całym Internecie? Zaoszczędziłem mi dużo czasu. Synergia wymaga cyjanogenmu lub podobnego na tablecie. Również nikt o tym nie wspomina.
Stefanos Kalantzis,

1
Wiem już x2x, znajdź ten post, szukając x2x Androida w Google ... Ale +1 za .vnc/xstartup, szczególnie za unset DBUS_SESSION_BUS_ADDRESS!! Mały, ale bogaty i bardzo przydatny post, dzięki!
F. Hauri

7

Jest to w zasadzie możliwe przy użyciu xdmx (rozproszony wielogłowicowy X), który pozwala utworzyć pojedynczy pulpit przy użyciu dwóch serwerów X działających na osobnych komputerach.

Zasadniczo możliwe są trzy scenariusze, ale żaden nie jest tak płynny jak iDisplay, ponieważ wszystkie wymagają co najmniej ponownego uruchomienia sesji X. Nie byłem w stanie sprawić, aby oba działały idealnie, ale używam Ubuntu 10.10 i nie mogę dokonać aktualizacji z różnych powodów. Te trzy to:

1: uruchom X-serwer na Androidzie (w sklepie App Store są już dostępne dwa) i użyj xdmx do połączenia z wyświetlaczem na komputerze stacjonarnym lub laptopie. - nie działało dla mnie, ponieważ xdmx zawiesił się, gdy wskaźnik przeniósł się do części tabletu na pulpicie.

2: uruchom drugi serwer X z zapleczem vnc na swoim komputerze, użyj xdmx, aby połączyć go w jeden pulpit z ekranem komputera, a następnie spójrz na część wirtualną z przeglądarką vnc na tablecie - nie działało dla mnie, ponieważ xdmx wymaga, aby wszystkie serwery X miały tę samą kolorystykę, czego nie ma w przypadku vncserver i prawdziwego wyświetlacza, i nie byłem w stanie przekonać vncserver do zmiany.

3: uruchom dwa serwery vncserver, po jednym dla każdego ekranu, a następnie połącz je za pomocą xdmx i spójrz na każdą część za pomocą vncviewer na odpowiednim komputerze. - Było to dla mnie najbliższe pracy, niestety inpout został pomieszany. był także dość powolny w prawdziwym kolorze przez Wi-Fi. Użyłem tego skryptu, aby uruchomić xdmx i 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


3

Zrobiłem prosty skrypt bash, aby tablet był drugim wyświetlaczem. Skopiuj ipad_monitor.sh(nie martw się. Działa to również z Androidem) w moim blogu .

Tym, co różni się od drugiego postu, jest to, że można bardzo łatwo ustawić pozycję drugiego ekranu z dodatkowym argumentem.

Edycja: zawarłem ipad_monitor.shtutaj oryginał . uruchom następującą komendę:

  • ./ipad_monitor.sh --right lub ./ipad_monitor.sh --left
  • ./ipad_monitor.sh --right --portrait
  • ./ipad_monitor.sh --right --portrait --hidpi

Podstawową ideą tego skryptu jest taki sam jak inni, bieganie xrandri x11vncjednak włączyłem opcje jak po której stronie, które chcesz dołączyć ekran.

#!/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

1
Czy masz nazwę skryptu / aplikacji lub alternatywnego linku, który możesz opublikować, aby uniknąć gnicia linków? W tym przypadku zazwyczaj staramy się zachować jak najbardziej samowystarczalność, aby nie polegać na innych witrynach pozostających bezczynnych, szczególnie jeśli witryny te zawierają większość informacji, które byłyby istotne dla odpowiedzi, w przypadku gdy informacje te nie są faktycznie zawarte w odpowiedzi .
sbergeron

Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
anonimowy2

2
@sbergeron Rozumiem. Tutaj dołączam oryginalny kod.
Bumsik Kim

1
@ anonymous2 Masz rację. Podałem tutaj kod bash.
Bumsik Kim

Ach, o wiele lepiej. Myślę, że powinno być w stanie tak się trzymać.
anonimowy2

2

Używam fikcyjnego sterownika xorg i klipu x11vnc. Punkt myszy nie utknął na krawędzi.

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

Na /etc/X11/xorg.confdrugim ekranie znajduje się sterownik dla manekina:

Sekcja „Urządzenie”
        Identyfikator „Skonfigurowane urządzenie wideo”
    Sterownik „radeon” #ZMIEŃ TO
EndSection

Sekcja „Monitor”
        Identyfikator „Skonfigurowany monitor”
EndSection

Sekcja „Ekran”
        Identyfikator „Ekran domyślny”
        Monitor „Skonfigurowany monitor”
        Urządzenie „Skonfigurowane urządzenie wideo”
EndSection


## Xdummy: ##
Sekcja „Urządzenie”
  Identyfikator „Karta wideo 0”
  „Manekin” kierowcy
  #VideoRam 4096000
  VideoRam 256000
EndSection

## Xdummy: ##
Sekcja „Monitor”
  Identyfikator „Monitor0”
# HorizSync 10,0 - 300,0
# VertRefresh 10.0 - 200.0
# DisplaySize 4335 1084
EndSection

## Xdummy: ##
Sekcja „Ekran”
  Identyfikator „Screen0”
  Urządzenie „Karta wideo 0”
  Monitor „Monitor0”
EndSection



Sekcja „Układ serwera”
  Identyfikator „dummy_layout”
  Ekran 0 „Domyślny ekran”
  Ekran 1 „screen0” po prawej stronie „Ekran domyślny”
    Opcja „Xinerama” „1”
EndSection

Następnie zaloguj się do sesji X i uruchom:

x11vnc -clip 1024x768+1280+0

Jakikolwiek sposób, aby to zrobić bez xorg.conf? Jeśli utworzę taki na komputerze, moja grafika zostanie całkowicie pomieszana.
daboross

Czy Xinerama jest nadal obsługiwany? Co powiesz na XRANDR?
Gringo Suave,

1

Te instrukcje mają na celu utworzenie „dodatkowego” ekranu dla twojego komputera z systemem Linux za pomocą tabletu lub dowolnego komputera za pośrednictwem klienta VNC.

Te kroki zrobiłem w Mageia3 32Bit (nie próbowałem wersji 64-bitowej), ale powinny być podobne dla innych dystrybucji (np. Ubuntu).

Upewnij się, że masz wszystkie wymagane pakiety za pomocą następującego polecenia terminala:

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

Po uzyskaniu wszystkich powyższych pakietów uruchom następujące polecenia:

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

Jeśli nie dostaniesz żadnych błędów, załataj Xdmx (mówiąc najprościej, już od jakiegoś czasu był „zepsuty”):

otwórz /usr/share/x11-server-sources/hw/dmx/input/dmxevents.ci zmień wiersz 730: zmień to:

POINTER_ABSOLUTE | POINTER_SCREEN, &mask);

do tego:

POINTER_RELATIVE | POINTER_DESKTOP, &mask);

JEŻELI linia 730 jest inna, użyj tej sekcji, aby znaleźć poprawną linię: Część oryginalna - linia do zmiany oznaczona *

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

Sprawdź swoją wersję Xdmx uruchamiając ./configure --versionw /usr/share/x11-server-source/, na Xdmx 1.13 i starszych trzeba także dokonać tych zmian (na 1.14 i nowsze można przejść do „zrobić” krok poniżej):

otwórz /usr/share/x11-server-sources/dix/getevents.c, linia 1395: zmień to:

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

Do tego:

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

(Część oryginalna - wiersz do zmiany oznaczony *)

    /* 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);

otwórz /usr/share/x11-server-sources/Xext/xtest.c, linia 311: zmień to:

flags = POINTER_ABSOLUTE | POINTER_SCREEN;

do tego:

flags = POINTER_ABSOLUTE | POINTER_DESKTOP;

(sekcja oryginalna - linia do zmiany oznaczona *)

       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, linia 73: Dodaj tę linię po linii zaczynającej się od #define POINTER_EMULATED:

#define POINTER_DESKTOP         (1 << 7)

Po wprowadzeniu powyższych zmian uruchom ponownie (w /usr/share/x11-server-sources/):

make

Powinieneś mieć nowy plik Xdmx w /usr/share/x11-server-sources/hw/dmx/. Musimy zainstalować to na całym świecie, więc zalecamy zmianę nazwy istniejącego:

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

i skopiuj nowy zamiast niego:

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

Teraz, gdy jesteś gotowy na pierwszą próbę, następujące polecenia pozwalają utrzymać główny / istniejący ekran ( :0) i otworzyć nowy ekran z obsługą wielu monitorów. Używam icewm z tymi poleceniami, aby uczynić go nieco bardziej lekkim (używam KDE na głównym ekranie :0i otwieram dowolną aplikację na wiele monitorów na nowym ekranie z wieloma głowicami). Zdecydowanie możesz napisać te polecenia w celu ułatwienia korzystania z nich (tak właśnie zrobiłem) - Każde z tych poleceń można wykonać w oknie konsoli i / lub terminalu dowolnego wyświetlacza, jedynym warunkiem jest wykonanie ich w kolejności.

To polecenie tworzy nowy ekran jako bufor ramki dla wyświetlacza VNC :2(dostosuj rozmiar ekranu zgodnie z potrzebami):

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

To rozpoczyna nową lekką sesję X na twoim fizycznym wyświetlaczu jako display :1(istnieją różne sposoby, aby to zrobić):

startx 'icewm' -- :1

To polecenie uruchamia wyświetlanie wielu ekranów fizycznych i wirtualnych oraz uruchamia icewm dla menedżera okien:

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

Teraz otwórz okno terminala i uruchom serwer VNC (zmień hasło według potrzeb):

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

Teraz pozostaje tylko odpalenie klienta VNC i połączenie się z VNC - może być konieczne wyłączenie lub dodanie wyjątku do zapory sieciowej do portu 5900, aby można było się z nią połączyć. Kolejną rzeczą do zapamiętania jest to, że niektórzy klienci VNC nie wyświetlają pozycji kursora zdalnego, zaświadczam, że „Mocha VNC” na iOS działa świetnie, jeśli wyłączysz opcję „mysz lokalna”.

Ciesz się przeciąganiem okien między głównym monitorem a nowym wirtualnym drugim monitorem (jednocześnie mając możliwość używania tabletu do klikania / pisania na rzeczach na drugim monitorze).

Aby zamknąć Xdmx, naciśnij dwukrotnie Ctrl+ Alt+ Backspace.

Automatyzacja:

Używam tego skryptu bash, aby rozpocząć cały proces (również zabija Xvfb przy wyjściu):

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

Następnie mam niestandardowy ~/.xinitrcplik z tym:

#!/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

Rozwiązywanie problemów:

  • Podczas uruchamiania Xdmx, jeśli pojawi się błąd informujący sh: /usr/local/bin/xkbcomp: No such file or directoryo konieczności wykonania polecenia cd /usr/local/bin" and "ln -s /bin/xkbcomp:, a następnie spróbuj ponownie Xdmx.

  • Ctrl+ Alt+ F1Przez F7ma pracować w Xdmx aby przełączyć się na inne konsole / xsessions ale z jakiegoś powodu nie działa, co zrobić, to po prostu wykonać sudo chvt X(gdzie X jest konsola / liczba xsession), aby przełączyć do mojego głównego wyświetlacza. Również po przełączeniu z powrotem na Xdmx mogą pojawić się problemy z rysowaniem w dowolnym otwartym oknie, po prostu klikam pasek zadań, aby ukryć / pokazać okno ponownie, zmuszając do przerysowania.


0

Dzięki za samouczki, podzielę się tym, co dla mnie działało na Ubuntu 14.04

Pobierz AndroidVNC tutaj na swój tablet

Pobierz x11vnc na komputer z systemem Ubuntu, uruchamiając

sudo apt-get install x11vnc

Musiałem użyć metody fałszywego sterownika Xorg. Oto jak wygląda mój plik /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**

Prawdopodobnie nie potrzebujesz wszystkiego tam, po prostu uruchom X -configure, aby uzyskać automatyczną konfigurację systemu i dodać do pliku fałszywe sekcje (między gwiazdkami). Rozdzielczość ekranu fikcyjnego w xorg.conf powinna wynosić szerokość twojego głównego monitora + szerokość twojego tabletu, w moim przypadku 1680 + 1024 = 2704 zachowaj wysokość głównego monitora, 1050 w moim przypadku. Uruchom ponownie serwer X / Uruchom ponownie / wyciągnij wtyczkę, cokolwiek bardziej Ci odpowiada :).

Uruchom x11vnc, wykonując

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

Tutaj rozdzielczość powinna wynosić szerokość tabletu x wysokość tabletu + szerokość głównego wyświetlacza + 0

Połącz się z komputerem za pomocą klienta androidVNC, pamiętaj, aby włączyć opcję myszy lokalnej. To powinno być to, teraz poczuj dziwność posiadania Linuksa na Androidzie :)


0

Miałem wiele problemów z innymi technikami wymienionymi tutaj. Chciałbym mieć lepsze rozwiązanie, ale moje powolne i proste rozwiązanie to dobry początek.

W przypadku serwera VNC wypróbowałem vncserverpakiet, ale ekran zgasł i musiałbym ponownie uruchomić, gdmaby cokolwiek znów działało. Połączyłem się tightvncserveri zadziałało po raz pierwszy bez konfiguracji.

Do współdzielenia myszy / klawiatury między ekranami użyłem x2vnc . Można to również wykorzystać w programie win2vnc do współdzielenia myszy / klawiatury z komputerem z systemem Windows obok komputera z systemem Linux.

Ostateczne polecenia:

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

W tym momencie powinieneś być w stanie otworzyć drugi ekran w programie VNC, łącząc się z YOUR_IP_ADDRESS:1. Aby uruchomić program na ekranie VNC, otwórz terminal, ustaw DISPLAY, a następnie uruchom polecenie. Na przykład, aby otworzyć xtermna „ekranie” VNC, uruchom:

export DISPLAY=:1
xterm

Przy takim podejściu drugi ekran jest dość wolny. Mimo to wiele innych opcji, które wypróbowałem, wpadło w ślepy zaułek, a ta działała bez konfiguracji.


0

Dla każdego, kto wciąż zastanawia się nad tym tematem: klip xrandr i x11vnc działa; aby mysz mogła się tam dostać, musisz użyć argumentu panoramy, aby ustawić obszar śledzenia myszy:

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

Następnie podczas uruchamiania xvnc użyj:

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

To powstrzymuje VNC przed próbą użycia własnego śledzenia kursora i maluje kursor jako część obrazu na ekranie.

Zrobiłem tutaj notatki http://mikescodeoddities.blogspot.ae/2015/04/android-tablet-as-second-ubuntu-screen.html


0

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 &

Teraz wystarczy kliknąć okno, które chcesz udostępnić.


PEŁNY :

Mam iPada i Chromebooka i chciałbym używać ich jako moich monitorów, żeby uso pewnych poleceń terminala htop, iptstate, nmonitp. Jestem leniwym facetem i wykorzystałem to:

  1. Instalacja pakietu: sudo apt-get install x11vnc
  2. Otwórz terminal i umieść xwininfo | awk '/Window.id/{print $4}'i kliknij w oknie, które chcesz udostępnić. Wynik będzie taki jak:

    $ xwininfo | awk '/Window.id/{print $4}'
    0x4402f34
    
  3. Teraz możesz rozpocząć x11vncsesję:

    $ x11vnc -viewonly -nopw -avahi -id 0x4402f34 >/dev/null 2>&1 &
    
  4. Zmień rozmiar okna (0x4402f34), aby uzyskać możliwie najlepszy obraz.

Przeszkadza powiązanych portu swojej sesji : 5900 -> :0, 5901 -:1, 5902 -> :2...

Poza tym działa dobrze z aplikacjami X11: Firefox, OpenOffice itp.


0

Użyj vnc_virtual_display_linker

Narzędzie konfiguruje drugi wirtualny monitor do łączenia się z VNC, jak opisano w wielu poprzednich odpowiedziach. Obsługuje nawet połączenia z urządzeń z systemem Android za pomocą kabla USB.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.