다른 콘솔(모니터)에서 시작 시 tmux 실행

다른 콘솔(모니터)에서 시작 시 tmux 실행

알로하!

모니터에 헤드리스 서버가 연결되어 있습니다. 서버에 그래픽 환경이 설치되어 있지 않으며 키보드나 마우스가 연결되어 있지 않습니다. SSH를 통해 로그인할 수 있습니다.

키보드를 연결하고 tty에 로그인하여 거기에 tmux 세션을 연결하지 않고도 모니터에 표시된 콘솔(tty)에 tmux 세션을 표시하고 싶습니다. 이렇게 하면 해당 tmux 세션에 SSH로 접속하여 해당 모니터에 표시되는 내용(로그, 시스템 사용량 등)을 원격으로 제어할 수 있습니다.

이 모니터에 어떤 콘솔이 연결되어 있는지(셸에 로그인, 로그인한 사용자 없음) 어떻게 알 수 있습니까? 그리고 시작 시(및/또는 원격으로/다른 콘솔에서) 자동으로 명령을 실행할 수 있습니까?

답변1

해결책

이것은 사용을 위한 것입니다 systemd.

/etc/systemd/system/tty8tmux.service루트로서 다음 내용이 포함된 파일을 만듭니다.

[Unit]
Description=Tmux session in tty8

[Service]
Type=idle
User=herrcrazi
KillMode=process
ExecStart=/usr/bin/tmux new-session -s tty8 -A -f read-only
ExecStartPost=+/usr/bin/chvt 8
ExecStop=/usr/bin/tmux kill-session -t tty8
ExecStopPost=+/usr/bin/chvt 1
TTYPath=/dev/tty8
StandardInput=tty
StandardOutput=tty
StandardError=tty

[Install]
WantedBy=multi-user.target

systemd변경된 사항에 대한 알림 :

sudo systemctl daemon-reload

서비스를 활성화합니다:

sudo systemctl enable tty8tmux.service

서비스를 시작합니다:

sudo systemctl start tty8tmux.service

서비스를 시작하면 tty8지정된 사용자의 이름을 딴 tmux 세션이 생성되고 herrcrazi여기에 tmux 클라이언트가 연결됩니다. 클라이언트는 가상 터미널 tty8에서 실행됩니다. tmux 세션이 이미 존재하는 경우 클라이언트는 세션을 다시 생성하지 않고 해당 세션에 연결합니다. 그럼에도 불구하고 tty8은 전면 가상 터미널이 될 것입니다.

서비스를 중지하면 이름이 지정된 tmux 세션이 삭제되고 tty8디스플레이가 tty1로 전환됩니다. 세션이 아닌 tmux 클라이언트만 종료하려면 사양을 생략(제거 또는 주석 처리)하세요 ExecStop=. KillMode=process기본 프로세스(즉, tmux 클라이언트)만 종료되기 때문입니다.

서비스가 시스템과 함께 자동으로 시작됩니다.

SSH를 통해 연결한 후 herrcrazi다음 명령을 호출하여 tmux 세션에 연결합니다.

tmux attach-session -t tty8 -f ignore-size

팁, 참고 사항

  • 서비스는 시스템과 함께 시작되며 아직 사용자가 사용할 수 있는 tmux 서버가 없을 수 있습니다 herrcrazi. tmux 서버가 자동으로 시작됩니다. 나중에 다른 tmux 세션을 생성할 수도 있으므로 herrcrazi동일한 서버를 사용합니다. 서버의 환경은 실제 상위(여기서는 )에서 파생되며 systemd클라이언트가 연결될 때 자동으로 업데이트되지 않으므로 예상한 것과 다를 수도 있고 그렇지 않을 수도 있습니다. 예를 들어 참조하십시오.이 답변그리고 그 안의 링크.

    tmux 서버는 공식적으로 서비스에 속하지만(제어 그룹에 관한 한) KillMode=process서비스가 중지될 때 종료되는 것을 방지할 수 있습니다.

    위의 이유로 인해 기본이 아닌 소켓을 사용하도록 고려하거나 User=somebodyelse알려 주십시오 tmux(예:-L tty8). 연결 시 사용자( sudo -u somebodyelse tmux a …)를 일치시키거나 올바른 소켓을 선택해야 합니다. 이렇게 하면 일반 사용자는 herrcrazi마치 서비스가 존재하지 않는 것처럼 다른 목적으로 tmux를 사용할 수 있습니다.

    somebodyelse아마도 뿌리일 겁니다.

  • 대신 에 tmux 세션을 생성하고 사전 정의된 창 레이아웃에서 사전 정의된 도구 세트(예: )를 실행 한 후 최종적으로 를 실행할 ExecStart=/usr/bin/tmux …수 있습니다. 특정 참고사항:ExecStart=/path/to/shellscriptshellscripthtopwatch sensorswatch df -hexectmux attach-session -t tty8

    • 추가하지 않고 모든 것을 설정하고 끝에 추가해야 합니다().
    • tmux는 추가하기 전에 잘못된 크기를 가정할 수 있습니다(참조이 문제). tmux new-session -d -s tty8 -A -f read-only -x - -y -스크립트에서 와 같이 사용하고 나머지는 설정하십시오.
    • exec tmux a …마지막으로 tmux 클라이언트가 필요합니다바꾸다스크립트와 systemd는 프로세스(스크립트)가 종료되었음을 확인할 수 없습니다.
    • 읽다이 답변해야 할 일과 하지 말아야 할 일을 알아보세요.
    • 미리 정확한 창 레이아웃을 생성하고 요청 시 이를 사용하는 방법이 있습니다.이 답변.
  • 특히 종료 시 커널 메시지가 tty8에 나타날 수 있습니다. 정상적인 작동 중에는 tmux 클라이언트가 표시하는 내용을 방해하며 tty8 내에서 실행되는 클라이언트가 자신의 필요에 맞게 터미널을 구성하므로 이러한 메시지가 제자리에 나타나지 않습니다. 커널에 tty1만 사용하도록 지시하는 것을 고려해보세요. console=tty1커널 매개변수를 추가하면 됩니다 . 이것이 유일한 매개변수인 경우 관련 행은 /etc/default/grub다음과 같습니다.

    GRUB_CMDLINE_LINUX="console=tty1"
    

    (또는GRUB_CMDLINE_LINUX_DEFAULT).

    파일을 저장한 후 호출 sudo update-grub하고 다시 시작하세요. On Demand를 사용하여 메시지를 보거나 dmesg계속 보기를 사용할 수 있습니다 dmesg -wH.

  • 전면 tty를 으로 수동으로 변경하려면 ttyN를 사용하십시오 chvt N. 가상 터미널이 아닌 경우(예: SSH를 통해 로그인하는 경우) 다음을 수행해야 합니다 sudo.

    sudo chvt 2
    
  • Debian GNU/Linux 12에서 테스트되었습니다.

관련 정보