배경

배경

배경

mail-notification일부 프로그램( 및 stalonetray)이 자주 정지되는 것 같아서 주기적으로 다시 시작하려고 합니다 . NetworkManager가 다시 연결되면 다시 시작되도록 설정하고 싶습니다. 따라서 /etc/NetworkManager/dispatcher.d/.

스크립팅

아래와 같이 스크립트를 만들 수 있습니다.

#!/bin/bash
sudo -u foo_user pkill mail-notificati -x
sudo -u foo_user DISPLAY=:0 mail-notification &

사용자로 직접 실행하면 잘 작동합니다. 그러나 루트 스크립트에서 호출하면 실패합니다. 비밀번호를 입력하라는 메시지가 표시됩니다 mail-notification. Gnome 키링을 읽을 수 없습니다.

foo_user이 프로그램을 다양한 방법으로 어떻게 실행할 수 있나요 ?

답변1

2021

간단히 말해서:

다른 사용자로 명령을 실행하려면 다음 명령을 사용할 수 있습니다.

runuser -u user -- command
다른 사용자로 명령을 실행하기 위해 루트에서만 사용할 수 있습니다.
인증이 필요하지 않습니다.
로그 메시지가 생성되지 않습니다.
권한 제한 및 문제가 있습니다.

su - user -c command
모든 사용자가 사용할 수 있습니다.
대상 사용자로 인증이 필요합니다. 또는 에서
메시지를 작성하세요 ./var/log/auth.log/var/log/secure

sudo -u user command
루트 권한이 있는 사용자나 파일의 사용자가 사용할 수 있습니다 sudoers.
현재 사용자(귀하)로 인증이 필요합니다. 또는 에서
메시지를 작성하십시오 ./var/log/auth.log/var/log/secure

pkexec --user user command
모든 사용자가 사용할 수 있습니다.
대상 사용자로 인증이 필요합니다. 또는 에서
메시지를 작성하세요 . 또는와 같은 대체 GUI 도구./var/log/auth.log/var/log/secure
gksugksudo

추가 정보:

다른 사용자로 Linux 실행 명령

다른 사용자로 GUI 애플리케이션을 실행합니다.

다른 사용자로 GUI 애플리케이션을 실행하려면 먼저 대상 사용자가 모니터에 연결하도록 허용해야 합니다. 그런 다음
xhost +si:localuser:user
///를 사용하여 runuser애플리케이션을 실행 하고 다음을 사용하여 후속 연결을 차단해야 합니다.susudopkexec
xhost
xhost -si:localuser:user

답변2

항상 오래된 것을 사용할 수 있습니다:

man 1 su

이 명령은 가장하려는 사용자로 하위 쉘을 엽니다. 루트로서 비밀번호를 묻지 않고 사용할 수 있습니다.

su foo_user -c whatevercommandyouwant

스크립트를 통해서도 작업할 수 있습니다.

답변3

GUI에서 시작되지 않은 프로세스에서 GUI와 상호 작용하려면 다음과 같은 일부 환경 변수를 설정해야 합니다 DISPLAY.반품XAUTHORITY기본 위치에 있지 않고 많은 최신 프로그램의 경우 다음이 필요합니다.놓다DBUS_SESSION_BUS_ADDRESS.

그러나 문제를 해결하는 보다 안정적인 방법은 NetworkManager에서 이러한 프로그램을 다시 시작하지 않는 것입니다. 성공적으로 실행하기 어려운 점 외에도 로그인 여부, 고려해야 할 다른 사용자 및 기타 디스플레이가 있는지 여부 등에 대해서도 걱정해야 합니다. 대신에,죽이다이러한 프로그램을 다시 시작하지 마십시오. 일반 세션에서는 직접 시작하지 말고 감독자에서 시작하면 죽으면 다시 시작됩니다. 나는 systemd에 이 기능이 포함되어 있다고 생각합니다(그러나 사용 방법을 모르겠습니다). 또는 전용 감독자 프로그램을 사용할 수 있습니다.감시 장치,감독하다,…

답변4

읽기, 복사 및 설치 run-asmachinectl, 실행을 관리하고 그래픽 애플리케이션을 실행하기 위한 변수를 설정하는 데 사용되는 Bash 및 Python 스크립트 :xhostdbus

run-as <user> <command>

그래픽 애플리케이션을 실행하려면 다음을 수행하십시오.

run-as -X <user> <command>

인용하다

관련 정보