Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges)
Bonjour,
je voudrais savoir s'il y a un moyen pour ouvrir une session sur un
Debian/Squeeze à distance, comme si on était devant la machine ? Un peu
comme pour le Bureau à distance de Windows avec le port 3389.
Je précise que l'ouverture de la session devra se faire avec un compte
non local, compte géré par un serveur SE3 avec un annuaire Ldap (je ne
sais pas si cette précision est importante pour une éventuelle solution).
Faut-il installer un paquet particulier ? Et utiliser un port particulier ?
C'est tout simple : le serveur X fournit le service d'affichage et d'accès aux dispositif d'entrée
Ok, le serveur X : - communique avec les applications clientes (firefox par exemple ?) - et prend en entrée le clavier et la souris le tout afin de gérer l'affichage en sortie sur la carte vidéo. C'est bien ça ?
, les clients sont les applications qui demandent l'affichage de fenêtres.
Et par exemple sur Squeeze, est-ce qu'on peut dire que gdm3 est un client du serveur X ?
complément : l'obtention d'une invite graphique (=client X) distante utilise le protocole XDMCP, qui a ceci de particulier que c'est le serveur X (¯fichage) qui prévient le client (=invite) qu'il est prêt à recevoir des requêtes d'affichage (X11).
Ok, c'est là où je butais.
Avec :
X -port 300 -query 192.168.0.101 :1
le serveur est bien le serveur X de la machine sur laquelle je me trouve physiquement (la machine locale) mais c'est ce serveur qui va entamer la connexion avec le client gdm3 de la machine distante (ce qui est plutôt rare pour un serveur) pour lui dire qu'il (le gdm3 distant) va pouvoir lui envoyer (au serveur X local) des requêtes d'affichage. Dans cette histoire, le serveur X de la machine distante n'intervient pas. C'est ça ?
-- François Lafont
Le 06/05/2012 13:21, YBM a écrit :
C'est tout simple : le serveur X fournit le service d'affichage et
d'accès aux dispositif d'entrée
Ok, le serveur X :
- communique avec les applications clientes (firefox par exemple ?)
- et prend en entrée le clavier et la souris
le tout afin de gérer l'affichage en sortie sur la carte vidéo. C'est
bien ça ?
, les clients sont les applications
qui demandent l'affichage de fenêtres.
Et par exemple sur Squeeze, est-ce qu'on peut dire que gdm3 est un
client du serveur X ?
complément : l'obtention d'une invite graphique (=client X) distante
utilise le protocole XDMCP, qui a ceci de particulier que c'est le
serveur X (¯fichage) qui prévient le client (=invite) qu'il est
prêt à recevoir des requêtes d'affichage (X11).
Ok, c'est là où je butais.
Avec :
X -port 300 -query 192.168.0.101 :1
le serveur est bien le serveur X de la machine sur laquelle je me trouve
physiquement (la machine locale) mais c'est ce serveur qui va entamer la
connexion avec le client gdm3 de la machine distante (ce qui est plutôt
rare pour un serveur) pour lui dire qu'il (le gdm3 distant) va pouvoir
lui envoyer (au serveur X local) des requêtes d'affichage. Dans cette
histoire, le serveur X de la machine distante n'intervient pas. C'est ça ?
C'est tout simple : le serveur X fournit le service d'affichage et d'accès aux dispositif d'entrée
Ok, le serveur X : - communique avec les applications clientes (firefox par exemple ?) - et prend en entrée le clavier et la souris le tout afin de gérer l'affichage en sortie sur la carte vidéo. C'est bien ça ?
, les clients sont les applications qui demandent l'affichage de fenêtres.
Et par exemple sur Squeeze, est-ce qu'on peut dire que gdm3 est un client du serveur X ?
complément : l'obtention d'une invite graphique (=client X) distante utilise le protocole XDMCP, qui a ceci de particulier que c'est le serveur X (¯fichage) qui prévient le client (=invite) qu'il est prêt à recevoir des requêtes d'affichage (X11).
Ok, c'est là où je butais.
Avec :
X -port 300 -query 192.168.0.101 :1
le serveur est bien le serveur X de la machine sur laquelle je me trouve physiquement (la machine locale) mais c'est ce serveur qui va entamer la connexion avec le client gdm3 de la machine distante (ce qui est plutôt rare pour un serveur) pour lui dire qu'il (le gdm3 distant) va pouvoir lui envoyer (au serveur X local) des requêtes d'affichage. Dans cette histoire, le serveur X de la machine distante n'intervient pas. C'est ça ?
-- François Lafont
YBM
Le 06.05.2012 13:59, Francois Lafont a écrit :
Le 06/05/2012 13:21, YBM a écrit :
C'est tout simple : le serveur X fournit le service d'affichage et d'accès aux dispositif d'entrée
Ok, le serveur X : - communique avec les applications clientes (firefox par exemple ?) - et prend en entrée le clavier et la souris le tout afin de gérer l'affichage en sortie sur la carte vidéo. C'est bien ça ?
exactement.
, les clients sont les applications qui demandent l'affichage de fenêtres.
Et par exemple sur Squeeze, est-ce qu'on peut dire que gdm3 est un client du serveur X ?
oui.
complément : l'obtention d'une invite graphique (=client X) distante utilise le protocole XDMCP, qui a ceci de particulier que c'est le serveur X (¯fichage) qui prévient le client (=invite) qu'il est prêt à recevoir des requêtes d'affichage (X11).
Ok, c'est là où je butais.
Avec :
X -port 300 -query 192.168.0.101 :1
le serveur est bien le serveur X de la machine sur laquelle je me trouve physiquement (la machine locale) mais c'est ce serveur qui va entamer la connexion avec le client gdm3 de la machine distante (ce qui est plutôt rare pour un serveur) pour lui dire qu'il (le gdm3 distant) va pouvoir lui envoyer (au serveur X local) des requêtes d'affichage. Dans cette histoire, le serveur X de la machine distante n'intervient pas. C'est ça ?
tout à fait.
Le 06.05.2012 13:59, Francois Lafont a écrit :
Le 06/05/2012 13:21, YBM a écrit :
C'est tout simple : le serveur X fournit le service d'affichage et
d'accès aux dispositif d'entrée
Ok, le serveur X :
- communique avec les applications clientes (firefox par exemple ?)
- et prend en entrée le clavier et la souris
le tout afin de gérer l'affichage en sortie sur la carte vidéo. C'est
bien ça ?
exactement.
, les clients sont les applications
qui demandent l'affichage de fenêtres.
Et par exemple sur Squeeze, est-ce qu'on peut dire que gdm3 est un
client du serveur X ?
oui.
complément : l'obtention d'une invite graphique (=client X) distante
utilise le protocole XDMCP, qui a ceci de particulier que c'est le
serveur X (¯fichage) qui prévient le client (=invite) qu'il est
prêt à recevoir des requêtes d'affichage (X11).
Ok, c'est là où je butais.
Avec :
X -port 300 -query 192.168.0.101 :1
le serveur est bien le serveur X de la machine sur laquelle je me trouve
physiquement (la machine locale) mais c'est ce serveur qui va entamer la
connexion avec le client gdm3 de la machine distante (ce qui est plutôt
rare pour un serveur) pour lui dire qu'il (le gdm3 distant) va pouvoir
lui envoyer (au serveur X local) des requêtes d'affichage. Dans cette
histoire, le serveur X de la machine distante n'intervient pas. C'est ça ?
C'est tout simple : le serveur X fournit le service d'affichage et d'accès aux dispositif d'entrée
Ok, le serveur X : - communique avec les applications clientes (firefox par exemple ?) - et prend en entrée le clavier et la souris le tout afin de gérer l'affichage en sortie sur la carte vidéo. C'est bien ça ?
exactement.
, les clients sont les applications qui demandent l'affichage de fenêtres.
Et par exemple sur Squeeze, est-ce qu'on peut dire que gdm3 est un client du serveur X ?
oui.
complément : l'obtention d'une invite graphique (=client X) distante utilise le protocole XDMCP, qui a ceci de particulier que c'est le serveur X (¯fichage) qui prévient le client (=invite) qu'il est prêt à recevoir des requêtes d'affichage (X11).
Ok, c'est là où je butais.
Avec :
X -port 300 -query 192.168.0.101 :1
le serveur est bien le serveur X de la machine sur laquelle je me trouve physiquement (la machine locale) mais c'est ce serveur qui va entamer la connexion avec le client gdm3 de la machine distante (ce qui est plutôt rare pour un serveur) pour lui dire qu'il (le gdm3 distant) va pouvoir lui envoyer (au serveur X local) des requêtes d'affichage. Dans cette histoire, le serveur X de la machine distante n'intervient pas. C'est ça ?
Oui, la faire passer dans un tunnel ssh serait une bonne idée.
J'ai voulu essayer et je n'y suis pas arrivé.
Je suis sur une Squeeze en local avec mon gnome-terminal sous les yeux et j'ai une autre Squeeze "distante" (192.168.0.100) dans laquelle gdm3 a le protocole xdmcp activé sur le port 3000. En somme, si je tape en local :
X -port 3000 -query 192.168.0.100 :1
je me retrouve bien devant la fenêtre de login gmd3 de ma Squeeze distante.
Pour créer un tunnel ssh entre les deux, j'ai pensé faire ceci. Sur la machine locale, je tape :
ssh -L 2080:localhost:3000
Ensuite, toujours sur la machine locale, je te tape :
X -port 2080 -query localhost :1
Et là j'ai un bel écran tout noir. Pourtant ça me paraissait logique au départ mais après les explications de YBM, je me dis que le serveur étant en local (ce n'est pas en fait le gdm3 distant avec le port 3000), je m'y prends peut-être à l'envers.
Comment faut-il faire pour mettre en place ce tunnel ? C'est le serveur X local qui initie la connexion, du coup y a-t-il un port (fixe) d'écoute de ce serveur X ?
-- François Lafont
Je me permets de revenir sur ce point là.
Le 06/05/2012 13:01, Luc Habert a écrit :
moi-meme :
je crois que la liaison n'est pas cryptée.
Oui, la faire passer dans un tunnel ssh serait une bonne idée.
J'ai voulu essayer et je n'y suis pas arrivé.
Je suis sur une Squeeze en local avec mon gnome-terminal sous les yeux
et j'ai une autre Squeeze "distante" (192.168.0.100) dans laquelle gdm3
a le protocole xdmcp activé sur le port 3000. En somme, si je tape en
local :
X -port 3000 -query 192.168.0.100 :1
je me retrouve bien devant la fenêtre de login gmd3 de ma Squeeze distante.
Pour créer un tunnel ssh entre les deux, j'ai pensé faire ceci. Sur la
machine locale, je tape :
ssh -L 2080:localhost:3000 root@192.168.0.100
Ensuite, toujours sur la machine locale, je te tape :
X -port 2080 -query localhost :1
Et là j'ai un bel écran tout noir. Pourtant ça me paraissait logique au
départ mais après les explications de YBM, je me dis que le serveur
étant en local (ce n'est pas en fait le gdm3 distant avec le port 3000),
je m'y prends peut-être à l'envers.
Comment faut-il faire pour mettre en place ce tunnel ? C'est le serveur
X local qui initie la connexion, du coup y a-t-il un port (fixe)
d'écoute de ce serveur X ?
Oui, la faire passer dans un tunnel ssh serait une bonne idée.
J'ai voulu essayer et je n'y suis pas arrivé.
Je suis sur une Squeeze en local avec mon gnome-terminal sous les yeux et j'ai une autre Squeeze "distante" (192.168.0.100) dans laquelle gdm3 a le protocole xdmcp activé sur le port 3000. En somme, si je tape en local :
X -port 3000 -query 192.168.0.100 :1
je me retrouve bien devant la fenêtre de login gmd3 de ma Squeeze distante.
Pour créer un tunnel ssh entre les deux, j'ai pensé faire ceci. Sur la machine locale, je tape :
ssh -L 2080:localhost:3000
Ensuite, toujours sur la machine locale, je te tape :
X -port 2080 -query localhost :1
Et là j'ai un bel écran tout noir. Pourtant ça me paraissait logique au départ mais après les explications de YBM, je me dis que le serveur étant en local (ce n'est pas en fait le gdm3 distant avec le port 3000), je m'y prends peut-être à l'envers.
Comment faut-il faire pour mettre en place ce tunnel ? C'est le serveur X local qui initie la connexion, du coup y a-t-il un port (fixe) d'écoute de ce serveur X ?
-- François Lafont
Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges)
Le 06/05/2012 12:40, Francois Lafont a écrit :
X -ac -port 300 -query 192.168.0.101 :1
Et dans le cas d'une redirection de port je lance : X -port 8000 -query <adresse> :1
ou bien la commande suivante est-elle équivalente ? X -query <adresse>:8000 :1
Avant de lancer cette commande, il faut 2 modifications si j'ai bien compris : /etc/gdm3/daemon.conf (suivi d'un redémarrage du daemon) et /etc/X11/Xwrapper.config.
Par contre, je n'ai pas compris l'avantage du paquet xserver-xephyr car pour l'instant je ne peux faire l'essai (ma machine distante ne répond pas pour une raison que j'ignore).
Merci pour tout cela, d'autant plus que la solution est très simple :-)
-- Michel Suquet
Le 06/05/2012 12:40, Francois Lafont a écrit :
X -ac -port 300 -query 192.168.0.101 :1
Et dans le cas d'une redirection de port je lance :
X -port 8000 -query <adresse> :1
ou bien la commande suivante est-elle équivalente ?
X -query <adresse>:8000 :1
Avant de lancer cette commande, il faut 2 modifications si j'ai bien
compris : /etc/gdm3/daemon.conf (suivi d'un redémarrage du daemon) et
/etc/X11/Xwrapper.config.
Par contre, je n'ai pas compris l'avantage du paquet xserver-xephyr car
pour l'instant je ne peux faire l'essai (ma machine distante ne répond
pas pour une raison que j'ignore).
Merci pour tout cela, d'autant plus que la solution est très simple :-)
Et dans le cas d'une redirection de port je lance : X -port 8000 -query <adresse> :1
ou bien la commande suivante est-elle équivalente ? X -query <adresse>:8000 :1
Avant de lancer cette commande, il faut 2 modifications si j'ai bien compris : /etc/gdm3/daemon.conf (suivi d'un redémarrage du daemon) et /etc/X11/Xwrapper.config.
Par contre, je n'ai pas compris l'avantage du paquet xserver-xephyr car pour l'instant je ne peux faire l'essai (ma machine distante ne répond pas pour une raison que j'ignore).
Merci pour tout cela, d'autant plus que la solution est très simple :-)
-- Michel Suquet
Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges)
Le 06/05/2012 12:54, YBM a écrit :
Il faut préciser si tu veux un nouveau bureau qui tourne à distance sur cette machine mais s'affiche devant toi ou si tu veux cloner un bureau qui tourne déjà sur l'écran local de cette machine et qui est visible devant toi.
La machine est allumée mais aucune session n'est ouverte.
Si une session est ouverte par un utilisateur devant cette machine avec une interface graphique, peut-on ouvrir une autre session à distance avec une interface graphique aussi ?
Ce que vous appelez un Bureau, c'est bien ce que j'appelle une interface graphique ou encore un Bureau à distance "à la windows" ?
À+
-- Michel Suquet
Le 06/05/2012 12:54, YBM a écrit :
Il faut préciser si tu veux un nouveau bureau qui tourne à distance sur
cette machine mais s'affiche devant toi ou si tu veux cloner un bureau
qui tourne déjà sur l'écran local de cette machine et qui est visible
devant toi.
La machine est allumée mais aucune session n'est ouverte.
Si une session est ouverte par un utilisateur devant cette machine avec
une interface graphique, peut-on ouvrir une autre session à distance
avec une interface graphique aussi ?
Ce que vous appelez un Bureau, c'est bien ce que j'appelle une interface
graphique ou encore un Bureau à distance "à la windows" ?
Il faut préciser si tu veux un nouveau bureau qui tourne à distance sur cette machine mais s'affiche devant toi ou si tu veux cloner un bureau qui tourne déjà sur l'écran local de cette machine et qui est visible devant toi.
La machine est allumée mais aucune session n'est ouverte.
Si une session est ouverte par un utilisateur devant cette machine avec une interface graphique, peut-on ouvrir une autre session à distance avec une interface graphique aussi ?
Ce que vous appelez un Bureau, c'est bien ce que j'appelle une interface graphique ou encore un Bureau à distance "à la windows" ?
À+
-- Michel Suquet
moi-meme
Le Sun, 06 May 2012 15:11:29 +0200, Francois Lafont a écrit :
ssh -L 2080:localhost:3000
non : ssh -X
sans un terminal. Tu obtiens une session console. et là tu peux ouvrir les progs que tu veux (Thunar, Firefox, claws-mail ou autre)
Pour te loguer en root d'office, il doit falloir des droits supplémentaires mais c'est pas très propre.
Le Sun, 06 May 2012 15:11:29 +0200, Francois Lafont a écrit :
ssh -L 2080:localhost:3000 root@192.168.0.100
non :
ssh -X nom@serveur
sans un terminal. Tu obtiens une session console. et là tu peux ouvrir
les progs que tu veux (Thunar, Firefox, claws-mail ou autre)
Pour te loguer en root d'office, il doit falloir des droits
supplémentaires mais c'est pas très propre.
Le Sun, 06 May 2012 15:11:29 +0200, Francois Lafont a écrit :
ssh -L 2080:localhost:3000
non : ssh -X
sans un terminal. Tu obtiens une session console. et là tu peux ouvrir les progs que tu veux (Thunar, Firefox, claws-mail ou autre)
Pour te loguer en root d'office, il doit falloir des droits supplémentaires mais c'est pas très propre.
YBM
Le 06.05.2012 18:35, "Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges)" a écrit :
Le 06/05/2012 12:54, YBM a écrit :
Il faut préciser si tu veux un nouveau bureau qui tourne à distance sur cette machine mais s'affiche devant toi ou si tu veux cloner un bureau qui tourne déjà sur l'écran local de cette machine et qui est visible devant toi.
La machine est allumée mais aucune session n'est ouverte.
Si une session est ouverte par un utilisateur devant cette machine avec une interface graphique, peut-on ouvrir une autre session à distance avec une interface graphique aussi ?
Oui, oui bien sûr. Mais ce sera une toute autre session. Il faut simplement activer XDMCP du côté du gestionnaire d'affichage (=invite de connexion) côté système distant. Comme indiqué dans ce fil pour gdm3.
Ensuite on peut ouvrir un serveur X en plein écran (X -query ip.système.distant) ou bien dans une fenêtre affiché sur un bureau local avec Xephyr.
Ce que vous appelez un Bureau, c'est bien ce que j'appelle une interface graphique ou encore un Bureau à distance "à la windows" ?
La confusion habituelle est que sous Windows on appelle souvent "bureau à distance" une prise de contrôle avec clonage de l'écran local vers une fenêtre distante, avec VNC par exemple. On peut faire ça aussi, mais ce n'est clairement pas ce que vous recherchez.
Ce que permet X11 de base avec XDMCP c'est plus proche de RDP.
Le 06.05.2012 18:35, "Michel Suquet (Collège Jean-Monnet 91640
Briis-sous-Forges)" a écrit :
Le 06/05/2012 12:54, YBM a écrit :
Il faut préciser si tu veux un nouveau bureau qui tourne à distance sur
cette machine mais s'affiche devant toi ou si tu veux cloner un bureau
qui tourne déjà sur l'écran local de cette machine et qui est visible
devant toi.
La machine est allumée mais aucune session n'est ouverte.
Si une session est ouverte par un utilisateur devant cette machine avec
une interface graphique, peut-on ouvrir une autre session à distance
avec une interface graphique aussi ?
Oui, oui bien sûr. Mais ce sera une toute autre session.
Il faut simplement activer XDMCP du côté du gestionnaire d'affichage
(=invite de connexion) côté système distant. Comme indiqué dans ce
fil pour gdm3.
Ensuite on peut ouvrir un serveur X en plein écran
(X -query ip.système.distant) ou bien dans une fenêtre affiché
sur un bureau local avec Xephyr.
Ce que vous appelez un Bureau, c'est bien ce que j'appelle une interface
graphique ou encore un Bureau à distance "à la windows" ?
La confusion habituelle est que sous Windows on appelle souvent "bureau
à distance" une prise de contrôle avec clonage de l'écran local vers une
fenêtre distante, avec VNC par exemple. On peut faire ça aussi, mais ce
n'est clairement pas ce que vous recherchez.
Ce que permet X11 de base avec XDMCP c'est plus proche de RDP.
Le 06.05.2012 18:35, "Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges)" a écrit :
Le 06/05/2012 12:54, YBM a écrit :
Il faut préciser si tu veux un nouveau bureau qui tourne à distance sur cette machine mais s'affiche devant toi ou si tu veux cloner un bureau qui tourne déjà sur l'écran local de cette machine et qui est visible devant toi.
La machine est allumée mais aucune session n'est ouverte.
Si une session est ouverte par un utilisateur devant cette machine avec une interface graphique, peut-on ouvrir une autre session à distance avec une interface graphique aussi ?
Oui, oui bien sûr. Mais ce sera une toute autre session. Il faut simplement activer XDMCP du côté du gestionnaire d'affichage (=invite de connexion) côté système distant. Comme indiqué dans ce fil pour gdm3.
Ensuite on peut ouvrir un serveur X en plein écran (X -query ip.système.distant) ou bien dans une fenêtre affiché sur un bureau local avec Xephyr.
Ce que vous appelez un Bureau, c'est bien ce que j'appelle une interface graphique ou encore un Bureau à distance "à la windows" ?
La confusion habituelle est que sous Windows on appelle souvent "bureau à distance" une prise de contrôle avec clonage de l'écran local vers une fenêtre distante, avec VNC par exemple. On peut faire ça aussi, mais ce n'est clairement pas ce que vous recherchez.
Ce que permet X11 de base avec XDMCP c'est plus proche de RDP.
Lucas Levrel
Le 6 mai 2012, "Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges...:
Par contre, je n'ai pas compris l'avantage du paquet xserver-xephyr
Si j'ai bien compris, ça permet d'afficher la session distante dans une fenêtre de la session locale. (Sinon, la commande que j'ai donnée met la session distante « à côté » de la session locale, sur Ctrl-Alt-F8.)
-- LL
Le 6 mai 2012, "Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges...:
Par contre, je n'ai pas compris l'avantage du paquet xserver-xephyr
Si j'ai bien compris, ça permet d'afficher la session distante dans une
fenêtre de la session locale. (Sinon, la commande que j'ai donnée met la
session distante « à côté » de la session locale, sur Ctrl-Alt-F8.)
Le 6 mai 2012, "Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges...:
Par contre, je n'ai pas compris l'avantage du paquet xserver-xephyr
Si j'ai bien compris, ça permet d'afficher la session distante dans une fenêtre de la session locale. (Sinon, la commande que j'ai donnée met la session distante « à côté » de la session locale, sur Ctrl-Alt-F8.)
-- LL
Lucas Levrel
Le 6 mai 2012, Francois Lafont a écrit :
Pour stopper la commande, je fais simplement un CTRL+c. Est-ce comme cela qu'il faut fermer la connexion distante ou bien y a-t-il une manière plus propre ?
1) Délogue-toi pour revenir à l'invite gdm, quand même ! 2) Tu peux aussi « tuer » le serveur X avec Ctrl-Alt-Backspace (éventuellement deux fois de suite selon sa config) mais je doute que ça soit plus propre.
-- LL
Le 6 mai 2012, Francois Lafont a écrit :
Pour stopper la commande, je fais simplement un CTRL+c. Est-ce comme
cela qu'il faut fermer la connexion distante ou bien y a-t-il une
manière plus propre ?
1) Délogue-toi pour revenir à l'invite gdm, quand même !
2) Tu peux aussi « tuer » le serveur X avec Ctrl-Alt-Backspace
(éventuellement deux fois de suite selon sa config) mais je doute que ça
soit plus propre.
Pour stopper la commande, je fais simplement un CTRL+c. Est-ce comme cela qu'il faut fermer la connexion distante ou bien y a-t-il une manière plus propre ?
1) Délogue-toi pour revenir à l'invite gdm, quand même ! 2) Tu peux aussi « tuer » le serveur X avec Ctrl-Alt-Backspace (éventuellement deux fois de suite selon sa config) mais je doute que ça soit plus propre.