___ answer812672 ___

Resumo: a solução atual, utilizável e aceitável é aceitável apenas em um ambiente cooperativo multiusuário, pode ser melhorada.

Eu escrevi um patch de prova de conceito utilizável para %code% que faz o trabalho.

Faz o que precisamos aqui!

Veja abaixo as instruções de instalação.

Pré-requisitos

  • Um sistema com pelo menos duas contas de usuário e usuários dispostos a permitir a troca rápida entre sessões gráficas sem redigitar senhas.
  • Cada usuário pode usar qualquer ambiente de área de trabalho que use totalmente %code% , inclusive usando %code% para bloqueio de sessão. Unity e XFCE devem funcionar.

Testado com o XFCE.

Como usar, como ver as alterações

Tente isso antes de realizar as alterações:

  • faça o usuário A abrir uma sessão gráfica
  • peça ao usuário B para abrir outra sessão gráfica

Agora, em qualquer uma das duas sessões, você pode fazer:

%pre%

ou

%pre%

Efeito das alterações

Sem a alteração, você verá um prompt de login que precisa digitar uma senha.

Com a mudança, você verá uma mudança imediata sem o prompt de login.

Aqui o interruptor é realmente rápido. Muito mais rápido que no Ubuntu 12.04 e mesmo sem piscar em alguns casos.

Uso prático

Para o máximo benefício, recomendo criar um ícone de iniciador em algum lugar em um dock / panel / wharf (seja qual for o nome em seu ambiente de desktop específico) que, quando clicado, é executado:

%pre%

AVISO DE SEGURANÇA

A aplicação dos comandos abaixo substitui os pacotes %code% do sistema por versões modificadas que permitem alternar entre dois usuários que estão sendo registrados em uma sessão gráfica. Isso enfraquece a segurança do sistema, por exemplo, o usuário A registra-se graficamente, bloqueia a sessão, vai embora, o usuário B efetua login. O usuário B pode desbloquear a sessão do usuário A e alternar para ela sempre que for aberta. E o contrário (trocar A e B).

As alterações não podem ser aplicadas sem acesso de administrador ( %code% é assumido, especialmente para instalação de pacotes).

Funciona bem para nós , mas ainda assim, note que %code% é um pacote importante e isso pode quebrá-lo ou introduzir outros bugs sutis. Quebra quebrará a capacidade de usar sessões de login gráficas para todos os usuários. Você é totalmente responsável pelo uso dos comandos abaixo. Você foi avisado.

Aviso de permanência

As alterações são quase permanentes. Eles ficam após a reinicialização. Para revertê-los, instale (usando %code% , %code% ou qualquer outro) os pacotes %code% regulares que substituirão os alterados.

Observe que sempre que o Ubuntu atualizar %code% packages e as atualizações estiverem instaladas, elas reverterão as alterações. O administrador pode aplicá-las novamente.

Possível refinamento (restaurar segurança)

Esta prova de conceito pode ser refinada por um uso inteligente de, e. Grupos Unix. %code% só permitiria a mudança se os usuários atuais e de destino fossem listados em qualquer grupo com um nome de arquivo convencional, como %code% . Tal mudança (possível junto com outras) poderia eventualmente ser incorporada em alguma solução oficial.

Comandos

Sugiro fazer login em um console de texto (pressione Ctrl-Alt-F1 e login) para seguir as etapas abaixo. Isso permite reiniciar o lightdm sem perder o shell atual.

Copie e cole os comandos abaixo em um bash shell e ele ajustará %code% para realizar as alterações.

%pre%

Observe que o comando abaixo fechará imediatamente todas as sessões gráficas sem a chance de salvar os dados, portanto, todos os usuários devem fechar os aplicativos adequadamente e salvar os dados necessários primeiro.

Se os pacotes foram bem instalados, a mudança pode ser ativada imediatamente com:

%pre%

ou reiniciando.

Feedback

Isso funciona para você? Você pode pensar em uma variante? Feedback bem-vindo.

    
___

5
___ answer812672 ___

Resumo: a solução atual, utilizável e aceitável é aceitável apenas em um ambiente cooperativo multiusuário, pode ser melhorada.

Eu escrevi um patch de prova de conceito utilizável para dm-tool switch-to-user que faz o trabalho.

Faz o que precisamos aqui!

Veja abaixo as instruções de instalação.

Pré-requisitos

  • Um sistema com pelo menos duas contas de usuário e usuários dispostos a permitir a troca rápida entre sessões gráficas sem redigitar senhas.
  • Cada usuário pode usar qualquer ambiente de área de trabalho que use totalmente dm-tool switch-to-user *username* , inclusive usando $CALLEDUSERNAME para bloqueio de sessão. Unity e XFCE devem funcionar.

Testado com o XFCE.

Como usar, como ver as alterações

Tente isso antes de realizar as alterações:

  • faça o usuário A abrir uma sessão gráfica
  • peça ao usuário B para abrir outra sessão gráfica

Agora, em qualquer uma das duas sessões, você pode fazer:

dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.DisplayManager $XDG_SEAT_PATH org.freedesktop.DisplayManager.Seat.SwitchToUser string:$CALLEDUSERNAME string:somesessionname

ou

%pre%

Efeito das alterações

Sem a alteração, você verá um prompt de login que precisa digitar uma senha.

Com a mudança, você verá uma mudança imediata sem o prompt de login.

Aqui o interruptor é realmente rápido. Muito mais rápido que no Ubuntu 12.04 e mesmo sem piscar em alguns casos.

Uso prático

Para o máximo benefício, recomendo criar um ícone de iniciador em algum lugar em um dock / panel / wharf (seja qual for o nome em seu ambiente de desktop específico) que, quando clicado, é executado:

%pre%

AVISO DE SEGURANÇA

A aplicação dos comandos abaixo substitui os pacotes $CALLEDUSERNAME do sistema por versões modificadas que permitem alternar entre dois usuários que estão sendo registrados em uma sessão gráfica. Isso enfraquece a segurança do sistema, por exemplo, o usuário A registra-se graficamente, bloqueia a sessão, vai embora, o usuário B efetua login. O usuário B pode desbloquear a sessão do usuário A e alternar para ela sempre que for aberta. E o contrário (trocar A e B).

As alterações não podem ser aplicadas sem acesso de administrador ( dm-tool switch-to-user *username* é assumido, especialmente para instalação de pacotes).

Funciona bem para nós , mas ainda assim, note que dm-tool é um pacote importante e isso pode quebrá-lo ou introduzir outros bugs sutis. Quebra quebrará a capacidade de usar sessões de login gráficas para todos os usuários. Você é totalmente responsável pelo uso dos comandos abaixo. Você foi avisado.

Aviso de permanência

As alterações são quase permanentes. Eles ficam após a reinicialização. Para revertê-los, instale (usando dm-tool , dm-tool ou qualquer outro) os pacotes lightdm regulares que substituirão os alterados.

Observe que sempre que o Ubuntu atualizar lightdm packages e as atualizações estiverem instaladas, elas reverterão as alterações. O administrador pode aplicá-las novamente.

Possível refinamento (restaurar segurança)

Esta prova de conceito pode ser refinada por um uso inteligente de, e. Grupos Unix. handle_seat_call() só permitiria a mudança se os usuários atuais e de destino fossem listados em qualquer grupo com um nome de arquivo convencional, como seat_switch_to_user() . Tal mudança (possível junto com outras) poderia eventualmente ser incorporada em alguma solução oficial.

Comandos

Sugiro fazer login em um console de texto (pressione Ctrl-Alt-F1 e login) para seguir as etapas abaixo. Isso permite reiniciar o lightdm sem perder o shell atual.

Copie e cole os comandos abaixo em um bash shell e ele ajustará seat_switch_to_user() para realizar as alterações.

%pre%

Observe que o comando abaixo fechará imediatamente todas as sessões gráficas sem a chance de salvar os dados, portanto, todos os usuários devem fechar os aplicativos adequadamente e salvar os dados necessários primeiro.

Se os pacotes foram bem instalados, a mudança pode ser ativada imediatamente com:

%pre%

ou reiniciando.

Feedback

Isso funciona para você? Você pode pensar em uma variante? Feedback bem-vindo.

    
___
por Stéphane Gourichon 13.08.2016 / 22:51

1 resposta

1

Resumo: a solução atual, utilizável e aceitável é aceitável apenas em um ambiente cooperativo multiusuário, pode ser melhorada.

Eu escrevi um patch de prova de conceito utilizável para lightdm que faz o trabalho.

Faz o que precisamos aqui!

Veja abaixo as instruções de instalação.

Pré-requisitos

  • Um sistema com pelo menos duas contas de usuário e usuários dispostos a permitir a troca rápida entre sessões gráficas sem redigitar senhas.
  • Cada usuário pode usar qualquer ambiente de área de trabalho que use totalmente lightdm , inclusive usando light-locker para bloqueio de sessão. Unity e XFCE devem funcionar.

Testado com o XFCE.

Como usar, como ver as alterações

Tente isso antes de realizar as alterações:

  • faça o usuário A abrir uma sessão gráfica
  • peça ao usuário B para abrir outra sessão gráfica

Agora, em qualquer uma das duas sessões, você pode fazer:

    dm-tool switch-to-user userA

ou

    dm-tool switch-to-user userB

Efeito das alterações

Sem a alteração, você verá um prompt de login que precisa digitar uma senha.

Com a mudança, você verá uma mudança imediata sem o prompt de login.

Aqui o interruptor é realmente rápido. Muito mais rápido que no Ubuntu 12.04 e mesmo sem piscar em alguns casos.

Uso prático

Para o máximo benefício, recomendo criar um ícone de iniciador em algum lugar em um dock / panel / wharf (seja qual for o nome em seu ambiente de desktop específico) que, quando clicado, é executado:

    dm-tool switch-to-user name-of-other-user

AVISO DE SEGURANÇA

A aplicação dos comandos abaixo substitui os pacotes lightdm do sistema por versões modificadas que permitem alternar entre dois usuários que estão sendo registrados em uma sessão gráfica. Isso enfraquece a segurança do sistema, por exemplo, o usuário A registra-se graficamente, bloqueia a sessão, vai embora, o usuário B efetua login. O usuário B pode desbloquear a sessão do usuário A e alternar para ela sempre que for aberta. E o contrário (trocar A e B).

As alterações não podem ser aplicadas sem acesso de administrador ( sudo é assumido, especialmente para instalação de pacotes).

Funciona bem para nós , mas ainda assim, note que lightdm é um pacote importante e isso pode quebrá-lo ou introduzir outros bugs sutis. Quebra quebrará a capacidade de usar sessões de login gráficas para todos os usuários. Você é totalmente responsável pelo uso dos comandos abaixo. Você foi avisado.

Aviso de permanência

As alterações são quase permanentes. Eles ficam após a reinicialização. Para revertê-los, instale (usando aptitude , synaptic ou qualquer outro) os pacotes lightdm* regulares que substituirão os alterados.

Observe que sempre que o Ubuntu atualizar lightdm packages e as atualizações estiverem instaladas, elas reverterão as alterações. O administrador pode aplicá-las novamente.

Possível refinamento (restaurar segurança)

Esta prova de conceito pode ser refinada por um uso inteligente de, e. Grupos Unix. lightdm só permitiria a mudança se os usuários atuais e de destino fossem listados em qualquer grupo com um nome de arquivo convencional, como lightdm-quickswitch-anystringfoo . Tal mudança (possível junto com outras) poderia eventualmente ser incorporada em alguma solução oficial.

Comandos

Sugiro fazer login em um console de texto (pressione Ctrl-Alt-F1 e login) para seguir as etapas abaixo. Isso permite reiniciar o lightdm sem perder o shell atual.

Copie e cole os comandos abaixo em um bash shell e ele ajustará lightdm para realizar as alterações.

(
set -euxv

echo Making sure system has necessary packages.

echo Installing packages will be done only once but might be long as it may fetch around 40Mbytes of data from the Internet.
sudo apt-get install devscripts wget

echo Enabling source packages in apt.
sudo sed -i '/^#\sdeb-src /s/^# *//' "/etc/apt/sources.list"
sudo apt-get --no-install-recommends build-dep lightdm

THETEMPDIR=$( mktemp -d )
cd $THETEMPDIR

echo Getting package source

PKGVERSION=$( dpkg-query -W --showformat='${Package}_${Version}' lightdm ) ; echo
STEM="http://archive.ubuntu.com/ubuntu/pool/main/l/lightdm/$PKGVERSION"
wget "${STEM}.dsc" || true
wget "${STEM}.tar.gz" || true
dpkg-source -x *.dsc || true

cd */ || { echo "Seems like we could not get the source using wget, try apt-get source." ; apt-get source lightdm ; cd */ ; }

pwd

if [ -d .pc ]
then
quilt push -a
quilt new allow_switch_between_logged_users_without_authentication
quilt add src/seat.c
fi

patch -p0 <<EOF
--- src/seat.c  2016-07-29 05:19:45.000000000 +0200
+++ src/seat.c  2016-08-15 19:37:11.693364683 +0200
@@ -1578,6 +1578,20 @@

     l_debug (seat, "Switching to user %s", username);

+    if (session)
+    {
+   l_debug (seat, "WIP quick switch: found inactive existing user session, switching to it: %s. For details, see https://sobrelinux.info/questions/54024/switching-between-two-opened-x-sessions-without-reauthenticating", username);
+
+   session_unlock (session);
+   seat_set_active_session (seat, session);
+
+   l_debug (seat, "WIP quick switch to user complete: %s.  For details, see https://sobrelinux.info/questions/54024/switching-between-two-opened-x-sessions-without-reauthenticating", username);
+   return TRUE;
+    }
+
+    l_debug (seat, "WIP quick switch: no session for user, switching to greeter: %s. For details, see https://sobrelinux.info/questions/54024/switching-between-two-opened-x-sessions-without-reauthenticating", username);
+
+
     /* Attempt to authenticate them */
     session = create_user_session (seat, username, FALSE);
     g_signal_connect (session, SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (switch_authentication_complete_cb), seat);
EOF

if [ -d .pc ]
then
quilt refresh
ls -al debian/patches/allow_switch_between_logged_users_without_authentication
cat debian/patches/allow_switch_between_logged_users_without_authentication
fi

echo Building modified packages.

dch -lquickswitch "Allow dm-tool switch-to-user username to switch without authentication if user session is already opened.  WARNING: this negates local security. For details, see https://sobrelinux.info/questions/54024/switching-between-two-opened-x-sessions-without-reauthenticating"
head debian/changelog
time dpkg-buildpackage -rfakeroot -uc -b

echo Installing modified packages.

cd ..
PACKAGESTOINSTALL=$( for DEBNAME in *.deb ; do PACKAGENAME="$( echo "$DEBNAME" | cut -f 1 -d _ )" ; if dpkg -l $PACKAGENAME | grep -q ^ii ; then echo $DEBNAME ; fi ; done ) ; sudo dpkg --install ${PACKAGESTOINSTALL}
)

Observe que o comando abaixo fechará imediatamente todas as sessões gráficas sem a chance de salvar os dados, portanto, todos os usuários devem fechar os aplicativos adequadamente e salvar os dados necessários primeiro.

Se os pacotes foram bem instalados, a mudança pode ser ativada imediatamente com:

    sudo service lightdm restart

ou reiniciando.

Feedback

Isso funciona para você? Você pode pensar em uma variante? Feedback bem-vindo.

    
por Stéphane Gourichon 15.08.2016 / 23:11