88 votes

Comment utiliser une tablette Android comme deuxième écran ?

J'ai remarqué que les gens utilisent un produit pour Windows et Mac appelé iDisplay qui vous permet d'utiliser votre Android ou votre iPad comme écran 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 la façon de commencer.

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

6voto

Bumsik Kim Points 170

J'ai fait un simple bash script pour faire d'une tablette un deuxième écran. Copie ipad_monitor.sh (Ne vous inquiétez pas, cela fonctionne aussi avec Android) dans mon site web. article de blog .

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

Edit : J'ai inclus l'original ipad_monitor.sh ici. exécutez cette commande comme :

  • ./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 les autres, en exécutant xrandr et x11vnc mais j'ai inclus des options comme le côté où vous voulez fixer l'écran.

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

6voto

Paul ALBERT Points 179

Je voulais juste ajouter que si vous voulez une meilleure connexion entre votre appareil Android et votre ordinateur, vous pouvez utiliser l'USB :

Assurez-vous que vous avez activé le débogage USB ( https://developer.Android.com/studio/debug/dev-options )

Puis installez adb via sudo apt-get install android-tools-adb

Ensuite, si votre serveur VNC fonctionne sur votre ordinateur sur le port 5900, utilisez adb avec :

adb reverse tcp:5900 tcp:5900

De cette façon, le port 5900 de votre ordinateur sera également accessible sur votre appareil Android grâce à localhost:5900 alors configurez votre client VNC Android pour vous connecter à localhost:5900 代わりに your-computer-IP-addres:5900

3voto

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, il suffit de cliquer sur la fenêtre que vous voulez partager.


COMPLET :

J'ai un iPad et un Chromebook et je voudrais les utiliser comme moniteurs, pour utiliser certaines commandes de terminal. htop , iptstate , nmon etc . Donc, je suis un gars paresseux et je l'ai fait en utilisant :

  1. Installation du paquet : sudo apt-get install x11vnc

  2. Ouvrez un terminal et mettez xwininfo | awk '/Window.id/{print $4}' et cliquez dans la fenêtre que vous voulez partager. Le résultat sera quelque chose comme :

     $ xwininfo | awk '/Window.id/{print $4}'
     0x4402f34
  3. Vous pouvez maintenant commencer votre x11vnc session :

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

Attention à ce qui est associé port de votre session : 5900 -> :0 , 5901 -> :1 , 5902 -> :2 ...

Fonctionne bien avec les applications X11 : Firefox, OpenOffice, etc.

2voto

user129603 Points 11

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

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

Il y a le /etc/X11/xorg.conf pour le conducteur fictif sur le deuxième écran :

Section "Device"
        Identifier      "Configured Video Device"
    Driver "radeon"         #CHANGE THIS
EndSection

Section "Monitor"
        Identifier      "Configured Monitor"
EndSection

Section "Screen"
        Identifier      "Default Screen"
        Monitor         "Configured Monitor"
        Device          "Configured Video Device"
EndSection

##Xdummy:##
Section "Device"
  Identifier "Videocard0"
  Driver "dummy"
  #VideoRam 4096000
  VideoRam 256000
EndSection

##Xdummy:##
Section "Monitor"
  Identifier "Monitor0"
#  HorizSync   10.0 - 300.0
#  VertRefresh 10.0 - 200.0
#  DisplaySize 4335 1084
EndSection

##Xdummy:##
Section "Screen"
  Identifier "Screen0"
  Device "Videocard0"
  Monitor "Monitor0"
EndSection

Section "ServerLayout"
  Identifier   "dummy\_layout"
  Screen       0 "Default Screen"
  Screen       1 "screen0" rightof "Default Screen"
    Option         "Xinerama" "1"
EndSection

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

x11vnc -clip 1024x768+1280+0

1voto

DiamondXmen Points 11

Ces instructions sont destinées à créer un écran "supplémentaire" pour votre machine linux à l'aide d'une tablette ou de n'importe quel ordinateur via un client VNC.

J'ai fait ces étapes dans Mageia3 32Bit (je n'ai pas essayé 64bit) mais cela devrait être similaire pour d'autres distros aussi (i.e. Ubuntu).

Assurez-vous que vous avez tous les paquets requis avec la commande suivante dans le terminal :

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 paquets ci-dessus, lancez ces commandes :

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 (pour faire simple, il est "cassé" depuis un certain temps) :

ouvrir /usr/share/x11-server-sources/hw/dmx/input/dmxevents.c et modifiez la ligne 730 : changez ceci :

POINTER_ABSOLUTE | POINTER_SCREEN, &mask);

à ç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 marquée d'un *.

    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 --version sur /usr/share/x11-server-source/ pour Xdmx 1.13 et plus anciennes, vous devez également effectuer ces modifications (pour les versions 1.14 et plus récentes, vous pouvez passer à l'étape "make" ci-dessous) :

ouvrir /usr/share/x11-server-sources/dix/getevents.c , ligne 1395 : changer ceci :

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

A ceci :

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

(Section originale - ligne à modifier marquée d'un *)

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

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

flags = POINTER_ABSOLUTE | POINTER_SCREEN;

à ça :

flags = POINTER_ABSOLUTE | POINTER_DESKTOP;

(section originale - ligne à modifier marquée d'un *)

       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 effectué les changements ci-dessus, réexécutez (en /usr/share/x11-server-sources/ ):

make

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

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

et copier le nouveau à sa 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 conserver votre affichage principal/existant ( :0 ) en cours d'exécution et ouvrir un nouvel écran avec le support multi-moniteur. J'utilise icewm avec ces commandes pour le rendre un peu plus léger (j'utilise KDE sur mon affichage principal :0 et ouvrir n'importe quelle application à grand écran dans le nouvel écran à têtes multiples). Vous pouvez très certainement script ces commandes pour faciliter l'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 exigence est qu'elles soient exécutées dans l'ordre.

Cette commande crée votre nouvel écran comme frame buffer pour votre écran VNC. :2 (ajustez la taille de l'écran comme vous le souhaitez) :

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

Ceci démarre une nouvelle session X légère sur votre écran physique comme affichage :1 (il existe différentes façons de procéder) :

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 comme vous le souhaitez) :

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

La seule chose qui reste à faire maintenant est de lancer votre client VNC et de vous connecter à votre VNC -- vous devrez peut-être désactiver ou ajouter une exception à votre pare-feu. au port 5900 pour que tu puisses t'y connecter. Une autre chose à garder à l'esprit est que certains clients VNC n'affichent pas la position du curseur à distance, je certifie que "Mocha VNC" pour iOS fonctionne très bien si vous désactivez l'option "souris locale".

Profitez de la possibilité de faire glisser Windows entre votre moniteur principal et votre nouveau second moniteur virtuel (tout en ayant la possibilité d'utiliser la tablette pour cliquer ou taper sur des éléments dans le second moniteur).

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

Automatisation :

J'utilise ce bash script pour démarrer tout le 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 ~/.xinitrc 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 disant sh: /usr/local/bin/xkbcomp: No such file or directory vous pouvez avoir besoin de faire l'exécution : cd /usr/local/bin" and "ln -s /bin/xkbcomp puis réessayez Xdmx.

  • Ctrl + Alt + F1 par le biais de F7 est censé fonctionner dans Xdmx pour passer à d'autres consoles/xsessions mais pour une raison quelconque, cela ne fonctionne pas, ce que je fais est simplement d'exécuter sudo chvt X (où X est un numéro de console/xsession) pour passer à mon affichage principal. De même, 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 cacher/afficher la fenêtre à nouveau, ce qui force un nouveau dessin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X