"systemctl --global"을 어떻게 사용해야 합니까?

"systemctl --global"을 어떻게 사용해야 합니까?

Systemd에는 플래그가 있고 --global내 배포 Ubuntu에서 catch-22를 발견했습니다.

  • 권한이 없는 사용자로 실행하면 systemctl에 유닛 파일을 /etc.
  • 및 변수를 설정할 수 없기 sudo때문에 작동하지 않습니다 .sudo$DBUS_SESSION_BUS_ADDRESS$XDG_*

sudo -E환경을 보호하면 작동 할 수도 있고 작동하지 않을 수도 있습니다 . 세션 root(예: 가상 콘솔)에서 실행하는 경우 확실히 작동합니다.

그것을 사용하는 올바른 방법은 무엇입니까 systemctl --global?

답변1

--globalenable: 및 와 함께 사용하면 disable전역 사용자 구성 디렉터리에서 작동하여 모든 사용자의 향후 모든 로그인에 대해 단위 파일을 전역적으로 활성화하거나 비활성화합니다.

이 플래그는 "글로벌" 수준의 서비스를 systemctl --global나타내며 주로 / 사용자 단위 에서 사용됩니다.systemctl --userenabledisable모든 사용자들시스템에서.

단위와 달리 systemctl --system활성화된 --global단위는 그렇지 않습니다.시작개인 사용자까지로그인따라서 사용자 단위를 "원합니다". ( sudo/ 는 su이런 의미에서 사용자를 "로그인"하지 않는다는 점에 유의하세요. 아래 대안을 참조하세요.)

당신이 보면시스템 사용자 단위 검색 경로, 사용자가 아닌 사람이 쓸 수 없는 일부 "전역" 디렉터리가 포함되어 있음을 알 수 있습니다 root. 이러한 디렉터리의 셀은 sudo systemctl --global(모든 사용자에 대해) 또는 (개별 사용자에 대해) systemctl --user관리 될 수 있습니다.

ls -l /usr/lib/systemd/user

ls -l /etc/systemd/user

sudo systemctl --global관리 단위에만 사용문서, 주로 활성화/비활성화합니다. 사용자 단위를 전역적으로 수동으로 활성화하면 /etc/systemd/user개별 사용자에 대한 Targets/wants 디렉터리 에 기호적으로 연결됩니다 ~/.config/systemd/user.

ls -l ~/.config/systemd/user

데스크탑 시스템에는 (패키지) 설치 중에 기본적으로 활성화될 수 있는 꽤 많은 전역 사용자 단위가 있을 수 있습니다. "메모리 내" 유닛 목록에는 생성된 임시 유닛/"파일"도 포함됩니다.장비그리고범위. 예를 들어 --type service좁은 범위를 사용합니다.

systemctl --global list-unit-files
systemctl --global list-units

systemctl --global list-units --all

사용자 단위 파일 목록은 --global개인 목록과 매우 유사해 보이지만 --user후자는 검색 경로에 (비전역) 사용자별 디렉터리를 포함합니다. 당신은 또한 볼 수 있습니다user.conf, 어디추가 사용자 디렉터리구성할 수 있습니다.

systemctl --user list-units
systemctl --user list-unit-files

user.conf현재 사용자에 대한 사용자 지정 추가 항목을 포함하여 조직 검색 디렉터리의 "실시간" 목록을 보려면 다음을 사용하세요.systemctl show.

systemctl --user show --property 'UnitPath' --value

(에 있는 systemctl --global list-unit-files항목을 제외하는 동안 해당 항목이 포함되어 있음을 확인했습니다 . 옳지 않거나 적어도 일관성이 없는 것 같습니까?)~/.config/systemd/usersystemctl --global list-units


사용자 유닛은 사용자가 로그인할 때까지 로드/실행되지 않으므로 --global status로그인한 각 사용자(본인 및 다른 사용자)의 장치 상태를 볼 수 없습니다.

sudo/는 실제로 시스템 관점에서 su"적절한 로그인"을 수행하지 않으므로 다른 사용자의 단위를 관리하는 데 사용해서는 안됩니다. 대신에 보세요--machine, 여기서 @및 는 .host현재 시스템을 참조하는 데 사용할 수 있습니다.sudo systemctl --user --machine [email protected]

# NOTE: demo status for yourself, but via sudo.
sudo systemctl --user --machine "${USER}@.host" status

모든 DBus 등 기능을 갖춘 별도의 세션으로 다른 사용자로 "로그인"하려면 다음을 사용하십시오.machinectl을 시작합니다 shell. (이것은 machinectl login쉘도 시작하지만 더 번거로운 "수동" 로그인 프로세스라는 점에 유의하십시오.)

# NOTE: demo logging in as yourself, but with a custom/different login shell.
sudo machinectl shell "${USER}@.host" /bin/sh

당신은 또한 볼 수 있습니다loginctl특히 "수동" 로그인이 필요 없이 enable-linger장기 실행 서비스를 허용합니다 .--user

관련 정보