컴퓨터가 데스크탑 관리자(이 경우 SDDM)로 부팅되고 ssh를 통해 명령을 보내 마치 컴퓨터의 키보드를 사용하여 로그인한 것처럼 해당 컴퓨터를 특정 사용자로 로그인하려고 한다고 가정해 보겠습니다. X 리트윗에 대해 말하는 것이 아닙니다.
문제의 컴퓨터는 Linux 데스크톱으로, 자녀가 일정 기간 동안 사용할 수 있도록 허용했습니다. 휴대폰에서 ssh 명령을 사용하여 시간 제한을 설정하고 세션을 잠그거나 잠금 해제할 수 있도록 설정했습니다(loginctl 사용). 컴퓨터가 부팅된 후 컴퓨터를 사용하려면 먼저 아내나 내가 컴퓨터에 로컬로 로그인해야 합니다. 그래야만 화면 잠금을 제어할 수 있습니다. 나는 loginctl을 사용하여 사용자 세션을 시작할 수 있다는 것을 몰랐습니다. 단지 세션을 전환하고 잠그고 종료하면 됩니다.
이 질문은 "tty1의 SDDM이 tty1의 특정 사용자로 로그인하도록 tty2에 어떤 명령을 입력할 수 있습니까?"(또는 포커스가 변경되고 해당 tty에 자동 연결되는 한 다른 tty에서 KDE에 로그인하는 것도 허용됨)를 묻는 것과 같습니다. tty.) SSH는 실제로 관련이 없는 것 같습니다. SSH는 나에게 필요한 기술을 구현한 것일 뿐이며 로컬에서도 수행할 수 있습니다.
답변1
이 문제는 다음과 관련될 수 있습니다.
디스플레이에서 원격으로 세션 시작: 0 그리고 X 서버가 이미 실행 중일 때 x11vnc를 원격으로 시작하십시오.
이 답변에서는 systemd를 서비스 관리자로, SDDM을 데스크탑 관리자로, x11vnc를 VNC 서버로 가정하겠습니다. 다양한 자원의 경우 적응이 필요하지 않습니다.
Wake on LAN을 통해 원격으로 컴퓨터를 부팅하고 KDE 로그인 화면에서 사용자 비밀번호를 입력하기 위해 키보드에 물리적으로 접근할 수 없다면 SSH를 통해 X 디스플레이를 열 수 없습니다. VNC 세션을 시작하기만 하면 됩니다.
$ x11vnc --display $DISPLAY
이 명령의 출력은 다소 장황하지만, 자세히 읽어보면 다음과 같은 내용을 찾을 수 있습니다.
20/12/2019 19:32:35 *** XOpenDisplay failed ($DISPLAY) *** x11vnc was unable to open the X DISPLAY: "$DISPLAY", it cannot continue. ***
아직 인증된 X 세션이 없기 때문입니다.
출력을 더 자세히 읽으면 다음을 찾을 수 있습니다.
** If NO ONE is logged into an X session yet, but there is a greeter
login program like "gdm", "kdm", "xdm", or "dtlogin" running, you
will need to find and use the raw display manager MIT-MAGIC-COOKIE
file. Some examples for various display managers:
gdm: -auth /var/gdm/:0.Xauth -auth /var/lib/gdm/:0.Xauth
kdm: -auth /var/lib/kdm/A:0-crWk72
-auth /var/run/xauth/A:0-crWk72
xdm: -auth /var/lib/xdm/authdir/authfiles/A:0-XQvaJk
dtlogin: -auth /var/dt/A:0-UgaaXa
이것이 바로 우리가 해야 할 일입니다. 원본 디스플레이 관리자 MIT-MAGIC-COOKIE 파일을 찾아 사용해야 합니다.
출력을 따라
$ systemctl status sddm
우리는 다음과 같은 것을 찾을 것입니다
CGroup: /system.slice/sddm.service
|-650 /usr/bin/sddm
`-660 /usr/lib/Xorg -nolisten tcp -auth /var/run/sddm/{$somelongstring} -background none -noreset -displayfd 17 -seat seat0 vt1
위에서 언급한 x11vnc 쿠키 파일을 얻으세요.
# x11vnc --display $DISPLAY -auth /var/run/sddm/{$somelongstring}
이러한 작업은 루트로 수행해야 합니다.
이제 컴퓨터에서 X11 VNC 서버가 실행되고 모든 장치(스마트폰도 가능)의 VNC 연결을 통해 시작 화면의 잠금을 해제할 수 있습니다.
누군가가 SSH 및 VNC 연결이 필요하지 않은 더 간단하고 쉬운 솔루션을 생각해 낼 수 있다면 한 줄 명령이면 충분할 것입니다. 그러나 이 방법은 매우 빠르므로 문제를 해결할 수 있습니다.
다양한 서비스 관리자, 데스크탑 관리자 및 VNC 서버의 경우 여기에 있는 명령을 그에 따라 조정해야 합니다.
고쳐 쓰다:
나는 어제 어떤 이유로 이것에 대해 생각하고 있었고 효과가 있을 수 있는 다른 접근 방식을 찾았습니다.
아이디어는 기본적으로 데스크톱/로그인 관리자를 버리고 대신 이를 통해 인증하고 X를 원격으로 직접 실행하는 것입니다.
SSH 서버 서비스가 데스크탑에 활성화되어 있다고 가정합니다. 원격 컴퓨터(휴대폰)에서 데스크톱 관리자(예: SDDM)를 중지합니다.
# systemctl stop sddm
이제 다음과 같은 다른 X 초기화 패키지가 설치되어 있다고 가정해 보겠습니다.시니트, startx와 같은 명령이면 충분합니다. 콘솔에서 실행하면,
$ startx
X는 문제 없이 구성 파일에 따라 시작됩니다. 나는 모든 Unix 계열 시스템을 알지 못하지만 내 경험상 startx
그것은 처리되거나 $HOME/.xinitrc
파일이 없으면 /etc/X11/xinitrc
X 서버가 예상대로 시작됩니다.
불행하게도 우리는 콘솔에 있지 않으며 다른 셸(예: SSH를 통해 명령을 보내는 터미널 에뮬레이터)에서 실행하려고 할 때 다음을 보내면 됩니다.
$ startx
찾다
/usr/lib/Xorg.wrap: Only console users are allowed to run the X server
반면 루트는 터미널 에뮬레이터를 통해 보안 쉘에서 X 서버를 원격으로 초기화할 수 있습니다. 예를 들어,
# startx
root
의 홈(또는 /etc/X11/xinitrc
위에서 언급한 대로) 구성 파일에 따라 X 서버를 예상대로 초기화합니다 . 이로 인해 권한을 부여할 수 없다는 문제가 아니라 권한에 대한 문제라고 생각하게 됩니다.
몇분간 검색하다가 우연히 발견한Xorg를 사용하는 중 오류 발생: 콘솔 사용자만 X 서버를 실행할 수 있습니까?,SSH 로그인에 콘솔 사용자만 X 서버를 실행할 수 있다고 표시됩니다./etc/X11/Xwrapper.config
, 둘 다 동일한 경로로 요약하고 다음 줄을 포함하도록 편집(또는 존재하지 않는 경우 추가 및 편집)합니다.
allowed_users=anybody
needs_root_rights=yes
이를 통해 startx
일반 사용자는 터미널 에뮬레이터에서 명령을 실행할 수 있습니다.
공책:
파일이 그에 따라 로드되는지 확인하세요 Xresources
. xinitrc
데스크탑 환경, 창 관리자, xrdb
명령 등에 올바르게 추가하는 것을 잊지 마십시오 .
관련된:
나는 또한 다음에서 영감을 얻은 또 다른 접근 방식에 대해 생각하고 있습니다. X11을 통해 풀 그래픽 데스크탑을 사용하여 원격으로 로그인하는 방법하지만 조금 더 생각해 볼 필요가 있습니다. 이는 추가 솔루션에 대한 영감을 제공할 수 있으며 더 좋거나 더 적합한 옵션이 될 수 있습니다.
답변2
저는 이 스크립트를 몇 주 전에 만들었고 잘 작동하므로 다른 사람들을 위해 여기에 게시합니다. 위의 a-sf-d에서 소개한 방법을 사용합니다. 이는 SSH를 통해 로그인하고 몇 글자만 입력할 수 있어야 했던 원래 요구 사항과는 다르지만 컴퓨터를 원격으로 보고 제어할 수 있다는 추가 이점이 있습니다.
#!/bin/bash
TMPVAR=`systemctl status sddm.service`
echo "TMPVAR = $TMPVAR"
TMPVAR2=$(echo $TMPVAR | cut -d '{' -f 2)
echo "TMPVAR2 = $TMPVAR2"
TMPVAR3=$(echo $TMPVAR2 | cut -d '}' -f 1)
echo "TMPVAR3 = $TMPVAR3"
TMPVAR4="/var/run/sddm/\{$TMPVAR3\}"
echo "TMPVAR4 = $TMPVAR4"
echo "starting VNC server with string: sudo x11vnc -auth $TMPVAR4 -
nopw -ncache 10"
x11vnc -auth $TMPVAR4 -nopw
이 파일을 생성하고 활성화하여 시작 시 systemd를 통해 이 스크립트를 호출합니다.
x11vnc.service
[Unit]
Description=starts x11vnc server with authorization to access sddm
After=sddm.service graphical.target
Wants=display-manager.service
[Service]
ExecStart=/home/daddy/Desktop/sddm_VNC.sh
Restart=always
[Install]
WantedBy=graphical.target
그리고 물론,
sudo systemctl enable x11vnc.service
답변3
매우 간단한 대답이 있습니다. SDDM 자동 로그인을 활성화한 다음 loginctl
시작 직후 또는 10초 후에 모든 세션 잠금을 호출하는 스크립트를 작성하는 것입니다. 그러면 loginctl
잠겨 있는 동안에도 편리함을 누릴 수 있습니다.
또 다른 방법은 SDDM 구성을 원격으로 편집하여 자동 로그인을 활성화하는 것입니다. ssh를 사용하여 수동으로 편집한 다음 SDDM을 다시 시작하거나 재부팅하거나 호출 시 구성 파일을 자동 로그인 파일로 바꾸는 스크립트를 만들 수 있습니다. 별칭을 지정하고 쉽게 실행할 수 있습니다. 바라보다여기더 많은 정보를 알고 싶습니다.