Comment utilisez-vous une tablette Android comme deuxième écran?

63

J'ai remarqué des personnes utilisant un produit pour Windows et Mac appelé iDisplay, qui vous permet d'utiliser votre Android ou votre iPad comme affichage secondaire. Cela semble être une excellente idée et quelque chose qui pourrait être fait sur Ubuntu. Malheureusement, je n'ai aucune idée de comment commencer.

Comment pourriez-vous recréer cette configuration sur Ubuntu?

Mark B
la source
2
Question similaire en cours de discussion sur les forums: Utilisez VNC comme deuxième moniteur
ændrük le
1
Même question sur le super utilisateur: utilisez VNC pour créer un deuxième écran
ændrük le
1
Ok, les solutions présentées ici sont celles du réseau. Mais y a-t-il une chance de faire cela en simulant simplement un moniteur via USB, pour obtenir la même expérience qu'un moniteur, tout comme le fait Duet ?
Augustin Riedinger
Donc, Duet pourrait peut-être (essentiellement) émuler une puce DisplayLink dans un logiciel - je ne le sais pas, mais c'est ce que je suppose. Je n'essaierais même pas. Ce que je voudrais essayer (et ce n’est pas difficile), c’est la mise en réseau USB: attachez (ou inversez l’attache) votre tablette et votre réseau.
chx

Réponses:

28

Obtenez un client VNC pour Android, démarrez une nouvelle session de serveur VNC sur votre ordinateur (ne vous contentez pas de partager l'affichage actuel - utilisez vnc4server et non x11vnc), connectez-vous à partir du client VNC Android et (le bit intelligent) partagez le Clavier et souris PC entre les deux sessions en utilisant la synergie.

Tous les logiciels nécessaires à cette fin sont disponibles dans le dépôt standard pour Ubuntu, et il existe quelques clients VNC gratuits disponibles pour Android sur le marché.

En utilisant cette méthode, vous ne pourrez pas faire glisser des fenêtres sur les écrans. Pour cela, je pense que vous auriez besoin d’utiliser Xdmx pour lier les deux sessions. Ceci est beaucoup plus difficile et vous causera probablement une perte d’accélération 3D.

Sachez également que Synergy et vnc n'utilisent pas le cryptage par défaut, vous devez donc tunneler les connexions si vous ne vous trouvez pas sur un réseau approuvé.

Alistair Buxton
la source
9
pouvez ajouter un exemple s'il vous plaît
rkmax
19
il serait utile d'avoir un exemple pas à pas que nous pourrons suivre
OganM
2
Comment cela ferait-il d’une tablette un deuxième écran - comme dans un espace d’écran plus grand?
NoBugs
J'ai eu des problèmes avec vncserver et Gnome 3. Chaque fois que j'essayais de lancer vncserver, l'écran devenait noir. J'ai fini par utiliser tightvncserver (également dans le dépôt Ubuntu) et cela a fonctionné du premier coup sans aucune configuration.
Troisième
Il s’agit plus d’un commutateur KVM ou d’une solution de contrôle à distance que d’un deuxième écran. Oui, cela vous donne un autre jeu d’entrées, mais la sortie est la même sur les deux appareils - vous ne pouvez même pas basculer la tablette sur un bureau virtuel différent de votre écran principal, mais allumer l’un sur l’autre. Cela ne répond pas à la question. La question concerne l'utilisation d'appareils mobiles pour un espace de sortie supplémentaire, pas du tout la saisie.
cprn
17

tl; dr: xrandr --fbet x11vnc --clipensemble faire un combo tueur.

Le fil lié par Recognitium a une idée très intéressante, il n'est pas sûr de savoir s'il s'agit bien de celui-ci car je n'ai pas trouvé l'auteur qu'il a indiqué, et aussi du suivi que j'ai effectué sur le post du forum, je le posterai séparément et non en tant que modification. :

  1. Tout d'abord, supposons que la machine principale ait une résolution d'écran de 1280x800 et que la machine secondaire sur laquelle vous voulez étendre votre bureau via VNC a une résolution d'écran de 1280x1024 et que vous voulez que la vue étendue soit à droite de votre écran principal. L'écran virtuel doit être 1280x800 + 1280x1024 = 2560x1024. (étendez-le horizontalement et faites de la résolution verticale la plus grande des deux) Alors courez xrandr --fb 2560x1024.

  2. Maintenant que l'écran est plus grand que votre moniteur principal, vous devez vous assurer qu'il n'y a pas de panoramique ou autre "fonctionnalité" non désirée activée et que les coordonnées du coin supérieur gauche de votre moniteur principal sont 0x0.

  3. x11vnc -clip 1280x1024+1281+0 plus ajouter d'autres options x11vnc à votre goût :)

Cela devrait être ça.

chx
la source
2
Cela semble être une façon beaucoup plus transparente de le faire que le tour Synergy, sympa! Je suis curieux de savoir comment l'espace virtuel supplémentaire va interagir avec mon gestionnaire de fenêtres en mosaïque. Donnera un coup de feu dans peu de temps et fera rapport.
Ibrahim
2
Défaite arraché à la gueule de la victoire. Le pointeur de la souris n'est pas autorisé à quitter l'écran principal. :(
Gringo Suave
1
Cela semble intéressant. Je parviens effectivement à avoir un double écran là-bas, mais malheureusement, la commande xrandr --fb 2560x1024ne semble avoir aucun effet. Ce qui signifie que je ne peux pas avoir un écran plus grand que la taille de mon moniteur principal ... :(
Augustin Riedinger
1
J'ai lu plus à ce sujet . Vous avez une 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 erreur. À mon avis, mon ordinateur portable ne prend pas en charge une résolution supérieure à la résolution native 1600*900. Cela signifie que cette solution ne peut pas fonctionner. Je vais plutôt devoir trouver une solution à double écran.
Augustin Riedinger
3
J'ai finalement réussi à le faire fonctionner grâce à ce message en lançant: sudo xrandr --fb 2732x768 --output LVDS1 --panning 2732x768+0+0/2732x768+0+0( --panningoption manquante )
Augustin Riedinger
16

Impossible de faire fonctionner les autres réponses, sauf celle-ci , qui se connecte parfaitement.

Il permet d’utiliser Android comme second moniteur, de partager la souris, de faire glisser des fenêtres entre une tablette et un ordinateur.

Voici un didacticiel pas à pas, demandé par les commentaires.

A. Tutoriel

1. Créer un nouveau moniteur virtuel

La résolution de ma tablette est 1280x1024. (Vous pouvez changer 1280et 1024partout dans les commandes si votre tablette est une résolution différente. Vous devrez peut - être changer LVDS1si le nom du moniteur par défaut est différent).

Run in terminal:

  1. $ gtf 1280 1024 60.

Il y a une ligne dans la sortie similaire à Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync. Copiez tout ce qui suit le mot Modeline(excluez-le) dans la commande suivante.

  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. Démarrer VNC

  1. x11vnc -clip 1280x1024+0+0

3. Connectez-vous avec Android (LAN (Wi-Fi) ou USB (Câble)).

  1. Recherchez l'adresse IP de votre ordinateur en utilisant ifconfig(lors d'une connexion depuis un réseau local).

  2. Téléchargez une application VNC et connectez-vous à l'ordinateur à l'aide de son adresse IP (et en sélectionnant un port 5900) dans l'application.

Les avis

  • Crédits: Kjans , contenu édité.
  • AVERTISSEMENT : Les données ne sont pas cryptées! (Pertinent pour une utilisation Wi-Fi et non-LAN)
  • AVERTISSEMENT : Tout réseau connecté atteignant le port 5900 peut se connecter à votre moniteur! (Ce n'est pas un problème si vous utilisez l' -listen <IP_ADDR>option de connexion USB ET en limitant l' option d' ajout d'interface x11vnc(où <IP_ADDR>est l'adresse de l'ordinateur sur le réseau auquel vous souhaitez accorder un accès exclusif))
  • L'exécution de l'une des étapes 1 à 4 deux fois peut générer des erreurs.
  • Après une utilisation réussie, l'étape 5. doit être répétée pour une autre connexion.

B. Script

Le didacticiel mis en œuvre sous forme de script (Modifiez l'adresse IP à utiliser avec le câble USB OU supprimez-la et décommentez la ligne à utiliser avec le 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
Elijas
la source
@Prometheus, le x11vnc -clip 1280x1024+0+0peut être remplacé par x11vnc -clip xinerama1. En outre, le --left-of LVDS1n'est pas strictement nécessaire si vous souhaitez utiliser l' Monitorsapplication des paramètres pour positionner le moniteur supplémentaire où vous le souhaitez.
LeoRochael le
6
xrandr: cannot find output "VIRTUAL1"a été renvoyé lors de la saisie du numéro 3. Des idées?
Dat tutbrus
3
xrandr: cannot find output "VIRTUAL1"est rentré dexrandr --addmode VIRTUAL1 1280x800_60.00
Tooniis
Cela fonctionne, sauf que vous devez avoir une sortie non utilisée capable du mode vidéo cible pour que cela fonctionne. VIRTUAL1semble être un espace réservé pour une telle sortie, pas quelque chose de présent dans un système typique.
Ruslan
1
@ cprn Oui, vous pouvez partager le curseur de la souris et faire glisser les fenêtres. C'est comme si vous aviez un deuxième moniteur connecté
Elijas
13
  1. Installer vnc4serveret x2x.
  2. Ensuite, configurez un .vnc/xstartupfichier de configuration. Le mien ressemble à ceci

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

    Il lance le bureau gnome-fallback (je ne sais pas comment lancer gnome 3 dans vnc).

  3. Pour lancer le serveur vnc, utilisez la vnc4server -geometry 800x480commande. Bien sûr, au lieu de 800x480, vous devez définir la résolution de votre tablette.
  4. Lancer x2x -east -to :1. Cette commande indique à votre ordinateur d'agir comme si l'affichage: 1 s'était placé à la droite de l'écran (utilisez l' -westoption si vous voulez qu'il soit à gauche). Vous ne pourrez pas déplacer les applications d'un écran à un autre, mais vous pouvez utiliser une souris et un clavier pour les contrôler tous les deux.
  5. Connectez-vous à l’affichage créé avec à vnc4serverpartir de votre tablette (le numéro de port est 5900 + numéro d’affichage (par exemple, pour l’affichage: 1 numéro de port sera 5901) (le numéro de l’affichage est indiqué dans la vnc4serversortie de s)).
  6. Pour quitter x2x, appuyez sur Ctrl-C. Vous pouvez également le lancer en arrière-plan ( x2x -east -to :1 &). Ensuite, vous devrez d'abord le déplacer au premier plan ( fg), ou le tuer avec kill $!(soyez prudent, il tue le dernier processus lancé en arrière-plan).
  7. Pour supprimer l’affichage créé, appelez vnc4server -kill :1où, au lieu de :1vous pouvez définir le numéro de votre nouvel affichage.
passick
la source
1
Merci pour x2x ... Pourquoi personne d'autre ne le mentionne sur tout l'internet ??? M'a sauvé beaucoup de temps. Synergy nécessite cyanogenmod ou similaire sur votre tablette. Aussi personne ne le mentionne.
Stefanos Kalantzis
1
Je sais déjà x2x, trouvez ce post en cherchant x2x android sur google ... Mais +1 pour .vnc/xstartup, surtout pour unset DBUS_SESSION_BUS_ADDRESS!! Petit mais riche et très utile post, merci!
F. Hauri
7

Ceci est en principe possible avec xdmx (Distributed Multihead X) qui vous permet de créer un seul poste de travail à l'aide de deux serveurs X exécutés sur des ordinateurs distincts.

Trois scénarios sont possibles en principe, mais aucun n'est aussi transparent que iDisplay, car ils nécessitent tous de redémarrer votre session X au moins. Je n'ai pas été capable de fonctionner parfaitement, mais j'utilise Ubuntu 10.10 et ne peux pas mettre à niveau pour différentes raisons. Les trois sont:

1: exécutez un serveur X sur Android (il en existe deux actuellement dans l’app store) et utilisez xdmx pour l’associer à l’affichage de votre ordinateur de bureau ou de votre ordinateur portable. - n'a pas fonctionné pour moi car xdmx s'est écrasé lorsque le pointeur s'est déplacé vers la partie tablette du bureau.

2: lancez un second serveur X avec backend vnc sur votre ordinateur, utilisez xdmx pour combiner cela en un seul bureau avec votre écran d’ordinateur, puis regardez la partie virtuelle avec un visualiseur vnc sur la tablette - cela n’a pas fonctionné pour moi car xdmx exige que tous les serveurs x aient les mêmes visuels en couleur, ce qui n'est pas le cas du vncserver et de l'affichage réel, et je n'ai pas réussi à convaincre le vncserver de changer.

3: exécutez deux serveurs vncs, un pour chaque écran, puis connectez-les avec xdmx et examinez chaque partie avec un vncviewer sur la machine respective. - Cela a été proche de travailler pour moi, malheureusement, inpout a été gâché. c'était aussi assez lent en couleurs vraies sur wifi. J'ai utilisé ce script pour démarrer xdmx et le 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

Félix
la source
3

J'ai fait un script bash simple pour rendre une tablette un deuxième écran. Copier ipad_monitor.sh(ne vous inquiétez pas. Cela fonctionne également avec Android) dans mon blog .

Ce qui diffère de l’autre message, c’est que vous pouvez définir très facilement la position du deuxième écran avec un argument supplémentaire.

Edit: j'ai inclus l'original ipad_monitor.shici. lancez cette commande comme ceci:

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

L'idée de base de ce script est la même que celle des autres, en cours d'exécution xrandret, x11vncmais j'ai inclus des options telles que le côté auquel vous souhaitez associer l'écran.

#!/bin/sh
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42):
# <[email protected]> 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
Bumsik Kim
la source
1
Avez-vous un nom pour le script / l'application ou un lien alternatif que vous pouvez poster pour aider à éviter la pourriture du lien? Ici, nous essayons généralement d’être aussi autonomes que possible afin de ne pas nous fier à d’autres sites, notamment si ces sites contiennent la majeure partie de l’information qui serait pertinente pour une réponse lorsque cette information n’est pas réellement insérée dans la réponse. .
Sbergeron
Bien que ce lien puisse répondre à la question, il est préférable d’inclure ici les parties essentielles de la réponse et de fournir le lien à titre de référence. Les réponses avec lien uniquement peuvent devenir non valides si la page liée est modifiée. - De l'avis
anonymous2
2
@sbergeron je vois. J'inclus le code original ici.
Bumsik Kim
1
@ anonymous2 Vous avez raison. J'ai inclus le code bash ici.
Bumsik Kim
Ah, beaucoup mieux. Je pense que cela devrait pouvoir rester comme ça.
anonymous2
2

J'utilise le pilote factice xorg et x11vnc -clip. Le point de la souris n'est pas coincé sur le bord.

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

Il y a le /etc/X11/xorg.confpilote factice sur le deuxième écran:

Section "Appareil"
        Identifiant "Périphérique vidéo configuré"
    Pilote "radeon" #CHANGE THIS
EndSection

Section "Moniteur"
        Identifiant "Moniteur configuré"
EndSection

Section "Ecran"
        Identifiant "Ecran par défaut"
        Moniteur "Moniteur configuré"
        Périphérique "Périphérique vidéo configuré"
EndSection


## Xdummy: ##
Section "Appareil"
  Identifiant "Videocard0"
  Pilote "factice"
  #VideoRam 4096000
  VideoRam 256000
EndSection

## Xdummy: ##
Section "Moniteur"
  Identifiant "Monitor0"
# HorizSync 10.0 - 300.0
# VertRefresh 10.0 - 200.0
# Taille d'écran 4335 1084
EndSection

## Xdummy: ##
Section "Ecran"
  Identifiant "Screen0"
  Appareil "Videocard0"
  Surveiller "Surveiller0"
EndSection



Section "ServerLayout"
  Identifiant "dummy_layout"
  Écran 0 "Écran par défaut"
  Écran 1 "écran0" à droite de "Écran par défaut"
    Option "Xinerama" "1"
EndSection

Puis connectez-vous à la session X et exécutez:

x11vnc -clip 1024x768+1280+0
mirage
la source
Tout moyen de faire cela sans xorg.conf? Si j'en crée un sur mon ordinateur, mes graphiques sont complètement perturbés.
daboross
Xinerama est-il toujours pris en charge? Que diriez-vous de xrandr?
Gringo Suave
1

Ces instructions permettent de créer un écran "supplémentaire" pour votre machine Linux à l'aide d'une tablette ou de tout ordinateur via un client VNC.

J'ai fait ces étapes dans Mageia3 32Bit (je n'ai pas essayé de 64 bits) mais je devrais être similaire pour les autres distributions (par exemple, Ubuntu).

Assurez-vous de disposer de tous les packages requis avec la commande de terminal suivante:

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

Une fois que vous avez tous les packages ci-dessus, lancez les commandes suivantes:

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

Si vous n'obtenez aucune erreur, corrigez Xdmx (tout simplement, il est "cassé" depuis un certain temps):

ouvrez /usr/share/x11-server-sources/hw/dmx/input/dmxevents.cet changez la ligne 730: changez ceci:

POINTER_ABSOLUTE | POINTER_SCREEN, &mask);

pour ça:

POINTER_RELATIVE | POINTER_DESKTOP, &mask);

SI la ligne 730 est différente, utilisez cette section pour trouver la ligne correcte: Section d'origine - ligne à modifier indiquée par *

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

Vérifiez votre version de Xdmx en exécutant ./configure --versiondans /usr/share/x11-server-source/, pour Xdmx 1,13 et plus vous devez aussi faire ces changements (pour 1.14 et plus récente , vous pouvez passer à la « faire » étape ci - dessous):

open /usr/share/x11-server-sources/dix/getevents.c, line 1395: changez ceci:

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

Pour ça:

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

(Section originale - ligne à modifier marquée avec *)

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

ouvert /usr/share/x11-server-sources/Xext/xtest.c, ligne 311: changez ceci:

flags = POINTER_ABSOLUTE | POINTER_SCREEN;

pour ça:

flags = POINTER_ABSOLUTE | POINTER_DESKTOP;

(section originale - ligne à modifier marquée avec *)

       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, ligne 73: Ajouter cette ligne après la ligne commençant par #define POINTER_EMULATED:

#define POINTER_DESKTOP         (1 << 7)

Après avoir apporté les modifications ci-dessus, ré-exécutez (dans /usr/share/x11-server-sources/):

make

Vous devriez avoir un nouveau fichier Xdmx dans /usr/share/x11-server-sources/hw/dmx/. Nous devons l’installer globalement pour plus de facilité, je vous recommande donc de renommer votre nom actuel:

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

et copiez le nouveau à la place:

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

Maintenant que vous êtes prêt à faire votre premier essai, les commandes suivantes vous permettent de garder votre affichage principal / existant en :0cours d'exécution et d'ouvrir un nouvel affichage avec le support multi-moniteur. J'utilise icewm avec ces commandes pour le rendre un peu plus léger (j'utilise KDE sur mon écran principal :0et ouvre n'importe quelle application multi-moniteur de grande taille sur le nouvel écran multi-têtes). Vous pouvez très certainement écrire ces commandes pour faciliter leur utilisation (c'est ce que j'ai fait) - N'importe laquelle de ces commandes peut être exécutée sur la console et / ou la fenêtre du terminal de n'importe quel affichage. La seule condition requise est qu'elles soient exécutées dans l'ordre.

Cette commande crée votre nouvel affichage en tant que tampon d'image pour votre affichage VNC :2(ajustez la taille de l'écran à votre guise):

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

Cela démarre une nouvelle session X légère sur votre affichage physique en affichage :1(il existe différentes façons de le faire):

startx 'icewm' -- :1

Cette commande démarre le multi-affichage entre votre écran physique et l'écran virtuel et lance icewm pour le gestionnaire de fenêtres:

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

Ouvrez maintenant une fenêtre de terminal et démarrez le serveur vnc (changez le mot de passe à votre guise):

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

Il ne reste plus qu’à allumer votre client VNC et à vous connecter à votre VNC - vous devrez peut-être désactiver ou ajouter une exception à votre pare-feu pour le port 5900 afin que vous puissiez vous y connecter. Une autre chose à garder à l'esprit est que certains clients VNC n'affichent pas la position du curseur distant. Je certifie que "Mocha VNC" pour iOS fonctionne parfaitement si vous désactivez l'option "souris locale".

Amusez-vous à faire glisser des fenêtres entre votre moniteur principal et votre nouveau second moniteur virtuel (tout en pouvant utiliser la tablette pour cliquer / taper sur des éléments du second moniteur).

Pour fermer Xdmx, appuyez deux fois sur Ctrl+ Alt+ Backspace.

Automatisation:

J'utilise ce script bash pour démarrer l'ensemble du processus (tue également Xvfb à la sortie):

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

Ensuite, j'ai un ~/.xinitrcfichier personnalisé avec ceci:

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

Dépannage:

  • Lorsque vous exécutez Xdmx, si vous obtenez une erreur indiquant sh: /usr/local/bin/xkbcomp: No such file or directoryque vous devrez peut-être exécuter cd /usr/local/bin" and "ln -s /bin/xkbcomp:, essayez à nouveau Xdmx.

  • Ctrl+ Alt+ F1through F7est supposé fonctionner dans Xdmx pour basculer vers d'autres consoles / xsessions, mais pour une raison quelconque, cela ne fonctionne pas. Ce que je fais est simplement exécuter sudo chvt X(X étant un numéro de console / xsession) pour basculer vers mon écran principal. De plus, lorsque vous revenez à Xdmx, vous pouvez rencontrer des problèmes de dessin sur toutes les fenêtres ouvertes. Je clique simplement sur la barre des tâches pour masquer / afficher à nouveau la fenêtre, ce qui force à le redessiner.

LinuxNewb
la source
0

Merci pour le tutoriel les gars, je vais partager ce qui a fonctionné pour moi sur Ubuntu 14.04

Obtenez AndroidVNC ici pour votre tablette

Obtenez x11vnc pour votre pc Ubuntu en lançant

sudo apt-get install x11vnc

J'ai dû utiliser la méthode du pilote factice Xorg. Voici à quoi ressemble mon fichier /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**

Vous n'aurez probablement pas besoin de tout ce qu'il y a dedans, lancez simplement X -configure pour obtenir la configuration automatique de votre système et ajouter les sections factices (les éléments entre les astérisques) dans votre fichier. La résolution de l'écran factice dans xorg.conf doit correspondre à la largeur de votre moniteur principal et à la largeur de la résolution de votre tablette. Dans mon cas, 1680 + 1024 = 2704 conservez la hauteur de votre moniteur principal, 1050 dans mon cas. Redémarrez le serveur X te convient plus :).

Exécuter x11vnc en faisant

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

Ici, la résolution doit être la largeur de votre tablette x hauteur de la tablette + largeur de l'écran principal + 0

Connectez-vous à votre ordinateur à l'aide du client androidVNC, assurez-vous d'activer l'option localmouse. Cela devrait être le cas, ressentez maintenant l'étrangeté de faire tourner Linux sur Android :)

Mathieu Grenier
la source
0

J'ai eu beaucoup de problèmes avec les autres techniques énumérées ici. J'aimerais avoir une meilleure solution, mais ma solution lente et simple est un bon point de départ.

Pour le serveur VNC, j'ai essayé le vncserverpackage, mais l'écran deviendrait noir et je devrais redémarrer gdmpour que tout fonctionne à nouveau. Je suis passé à tightvncserveret cela a fonctionné la première fois sans configuration.

Pour partager la souris / le clavier entre les écrans, j'ai utilisé x2vnc . Cela pourrait également être utilisé avec win2vnc pour partager la souris / le clavier avec un PC Windows situé à côté de votre PC Linux.

Commandes finales:

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

À ce stade, vous devriez pouvoir ouvrir le deuxième écran d’un programme VNC en vous connectant à YOUR_IP_ADDRESS:1. Pour démarrer un programme sur l'écran VNC, ouvrez un terminal, définissez-le DISPLAY, puis exécutez la commande. Par exemple, pour ouvrir xterm"l'écran" de VNC, exécutez:

export DISPLAY=:1
xterm

En utilisant cette approche, le deuxième écran est assez lent. Malgré tout, bon nombre des autres options que j'ai essayées se sont retrouvées dans des impasses, et celle-ci fonctionnait sans configuration.

troisième tiers
la source
0

Pour ceux qui s’interrogent encore sur ce sujet: le clip xrandr et x11vnc fonctionne; pour permettre à la souris d'arriver par là, vous devez utiliser l'argument panoramique pour définir la zone de suivi de la souris:

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

Ensuite, lors de l'exécution de xvnc, utilisez:

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

Cela empêche VNC d'essayer d'utiliser son propre suivi de curseur et le peint en tant que partie de l'image à l'écran.

J'ai pris des notes ici http://mikescodeoddities.blogspot.ae/2015/04/android-tablet-as-second-ubuntu-screen.html

Mike Dawson
la source
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 &

Maintenant, cliquez simplement sur la fenêtre que vous souhaitez partager.


COMPLET :

J'ai un iPad et Chromebook et je voudrais les utiliser comme mes moniteurs, juste pour Uso certaines commandes du terminal htop, iptstate, nmon, etc. Donc, je suis un gars paresseux et je l'ai créé avec:

  1. Instalation du paquet: sudo apt-get install x11vnc
  2. Ouvrez un terminal, placez xwininfo | awk '/Window.id/{print $4}'et cliquez dans la fenêtre que vous souhaitez partager. La sortie sera quelque chose comme:

    $ xwininfo | awk '/Window.id/{print $4}'
    0x4402f34
    
  3. Maintenant, vous pouvez commencer votre x11vncsession:

    $ x11vnc -viewonly -nopw -avahi -id 0x4402f34 >/dev/null 2>&1 &
    
  4. Redimensionnez la fenêtre (0x4402f34) pour obtenir la meilleure image possible.

Mind the associé le port de votre séance : 5900 -> :0, 5901 -:1, 5902 -> :2...

En outre, fonctionne bien avec les applications X11: Firefox, OpenOffice, etc.

Antonio Feitosa
la source
0

Utilisez vnc_virtual_display_linker

L'outil configure un deuxième moniteur virtuel pour la connexion à VNC, comme décrit dans de nombreuses réponses précédentes. Il prend même en charge les connexions à partir d'appareils Android à l'aide d'un câble USB.

Falko Menge
la source