RDP 초기 설정에 API 자동 설치 및 API 기반 활성화 추가
- install_rdp_api() 함수 추가 (자동 API 설치) - RDP 활성화 시 API를 통해 모드 전환 (curl POST /toggle) - API 작동 = RDP 제어 가능 보장 - API 실패 시 자동으로 직접 활성화 fallback - 설정 요약에 API 설치 상태 표시 - 수동 적용 안내에 API 명령어 포함 장점: - API 없이 RDP만 켜지는 상황 방지 - 항상 원격 제어 가능한 상태 보장 - 사용자가 두 스크립트 따로 실행할 필요 없음
This commit is contained in:
parent
85c5e1ec29
commit
9c952449d9
@ -452,17 +452,84 @@ EOF
|
||||
msg_ok "Openbox 설정 완료"
|
||||
}
|
||||
|
||||
# RDP Toggle API 설치
|
||||
install_rdp_api() {
|
||||
msg_info "RDP Toggle API 설치 중..."
|
||||
|
||||
local INSTALL_DIR="/opt/rdp-toggle-api"
|
||||
local VENV_DIR="$INSTALL_DIR/venv"
|
||||
local GITEA_BASE_URL="https://git.0bin.in/thug0bin/pve9-repo-fix/raw/branch/main/RDP"
|
||||
|
||||
# Python 및 venv 설치
|
||||
msg_info "Python 및 필수 패키지 설치 중..."
|
||||
apt install -y python3 python3-venv python3-pip curl > /dev/null 2>&1
|
||||
|
||||
# 설치 디렉토리 생성
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
|
||||
# 가상환경 생성
|
||||
msg_info "Python 가상환경 생성 중..."
|
||||
python3 -m venv "$VENV_DIR"
|
||||
|
||||
# 가상환경에서 패키지 설치
|
||||
msg_info "FastAPI 패키지 설치 중..."
|
||||
"$VENV_DIR/bin/pip" install --upgrade pip > /dev/null 2>&1
|
||||
"$VENV_DIR/bin/pip" install fastapi==0.115.5 uvicorn==0.32.1 python-multipart==0.0.20 pydantic==2.10.3 > /dev/null 2>&1
|
||||
|
||||
# API 파일 다운로드
|
||||
msg_info "API 서버 파일 다운로드 중..."
|
||||
curl -fsSL "$GITEA_BASE_URL/rdp-toggle-api.py" -o "$INSTALL_DIR/rdp-toggle-api.py"
|
||||
chmod +x "$INSTALL_DIR/rdp-toggle-api.py"
|
||||
|
||||
# systemd 서비스 생성
|
||||
msg_info "systemd 서비스 생성 중..."
|
||||
cat > /etc/systemd/system/rdp-toggle-api.service << EOF
|
||||
[Unit]
|
||||
Description=RDP Toggle API Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=$INSTALL_DIR
|
||||
ExecStart=$VENV_DIR/bin/python $INSTALL_DIR/rdp-toggle-api.py
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 서비스 활성화 및 시작
|
||||
msg_info "API 서비스 활성화 및 시작 중..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable rdp-toggle-api.service > /dev/null 2>&1
|
||||
systemctl start rdp-toggle-api.service
|
||||
|
||||
# API 서비스 시작 대기
|
||||
sleep 3
|
||||
|
||||
# API 서비스 확인
|
||||
if systemctl is-active rdp-toggle-api.service > /dev/null 2>&1; then
|
||||
msg_ok "RDP Toggle API 설치 완료 (포트 8090)"
|
||||
return 0
|
||||
else
|
||||
msg_warn "API 서비스가 정상적으로 시작되지 않았습니다."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 설정 테스트
|
||||
test_configuration() {
|
||||
msg_info "설정 테스트 중..."
|
||||
|
||||
|
||||
# systemd 서비스 상태 확인
|
||||
if systemctl is-enabled getty@tty1.service > /dev/null 2>&1; then
|
||||
msg_ok "getty@tty1 서비스가 활성화되어 있습니다."
|
||||
else
|
||||
msg_warn "getty@tty1 서비스가 비활성화되어 있습니다."
|
||||
fi
|
||||
|
||||
|
||||
# 필수 파일들 존재 확인
|
||||
local files=(
|
||||
"/etc/systemd/system/getty@tty1.service.d/override.conf"
|
||||
@ -470,7 +537,7 @@ test_configuration() {
|
||||
"/home/$LOCAL_USER/.xinitrc"
|
||||
"/home/$LOCAL_USER/.config/openbox/rc.xml"
|
||||
)
|
||||
|
||||
|
||||
for file in "${files[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
msg_ok "설정 파일 존재: $file"
|
||||
@ -478,7 +545,7 @@ test_configuration() {
|
||||
msg_error "설정 파일 누락: $file"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# FreeRDP3 설치 확인
|
||||
if command -v xfreerdp3 > /dev/null 2>&1; then
|
||||
msg_ok "FreeRDP3 설치 확인됨"
|
||||
@ -500,6 +567,7 @@ print_completion() {
|
||||
echo " - 로컬 사용자: $LOCAL_USER"
|
||||
echo " - 자동 로그인: 활성화됨 (tty1)"
|
||||
echo " - 풀스크린 RDP: 활성화됨"
|
||||
echo " - RDP Toggle API: 설치됨 (포트 8090)"
|
||||
echo ""
|
||||
echo -e "${YELLOW}다음 단계:${NC}"
|
||||
echo " 1. RDP 연결을 활성화하세요 (즉시 적용 또는 재부팅)"
|
||||
@ -516,20 +584,36 @@ print_completion() {
|
||||
|
||||
case $apply_choice in
|
||||
1)
|
||||
msg_info "getty@tty1 서비스를 재시작하여 즉시 적용합니다..."
|
||||
msg_info "API를 통해 RDP 모드로 전환합니다..."
|
||||
systemctl daemon-reload
|
||||
systemctl restart getty@tty1.service
|
||||
sleep 1
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ RDP 연결이 tty1에서 활성화되었습니다!${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}참고:${NC}"
|
||||
echo " - 물리 모니터(tty1)에서 RDP 연결이 시작됩니다"
|
||||
echo " - SSH 세션은 계속 사용 가능합니다"
|
||||
echo " - 현재 SSH 세션에서는 RDP 화면을 볼 수 없습니다"
|
||||
echo " - Shell 모드로 전환하려면: chvt 1 && systemctl stop getty@tty1"
|
||||
echo ""
|
||||
# API를 통해 RDP 모드 활성화
|
||||
local api_response=$(curl -s -X POST http://localhost:8090/toggle \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"mode":"rdp"}' 2>/dev/null)
|
||||
|
||||
if echo "$api_response" | grep -q '"status":"success"'; then
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ RDP 모드가 API를 통해 활성화되었습니다!${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}참고:${NC}"
|
||||
echo " - 물리 모니터(tty1)에서 RDP 연결이 시작됩니다"
|
||||
echo " - SSH 세션은 계속 사용 가능합니다"
|
||||
echo " - RDP Toggle API: http://$(hostname -I | awk '{print $1}'):8090"
|
||||
echo ""
|
||||
echo -e "${CYAN}API 사용 예시:${NC}"
|
||||
echo " Shell 모드로 전환: curl -X POST http://localhost:8090/toggle -H 'Content-Type: application/json' -d '{\"mode\":\"shell\"}'"
|
||||
echo " 상태 확인: curl http://localhost:8090/status"
|
||||
echo ""
|
||||
else
|
||||
msg_warn "API를 통한 RDP 활성화에 실패했습니다. 수동으로 활성화합니다..."
|
||||
systemctl restart getty@tty1.service
|
||||
sleep 1
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ RDP 연결이 tty1에서 활성화되었습니다!${NC}"
|
||||
echo ""
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
msg_info "시스템을 재부팅합니다..."
|
||||
@ -541,7 +625,8 @@ print_completion() {
|
||||
echo -e "${GREEN}설정이 완료되었습니다.${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}수동 적용 방법:${NC}"
|
||||
echo " 즉시 적용: systemctl daemon-reload && systemctl restart getty@tty1"
|
||||
echo " API로 RDP 활성화: curl -X POST http://localhost:8090/toggle -H 'Content-Type: application/json' -d '{\"mode\":\"rdp\"}'"
|
||||
echo " 또는 직접 활성화: systemctl daemon-reload && systemctl restart getty@tty1"
|
||||
echo " 또는 재부팅: reboot"
|
||||
echo ""
|
||||
;;
|
||||
@ -572,7 +657,10 @@ main() {
|
||||
setup_x_autostart
|
||||
setup_rdp_connection
|
||||
setup_openbox
|
||||
|
||||
|
||||
# RDP Toggle API 설치
|
||||
install_rdp_api
|
||||
|
||||
# 테스트 및 완료
|
||||
test_configuration
|
||||
print_completion
|
||||
|
||||
Loading…
Reference in New Issue
Block a user