diff --git a/README.md b/README.md index 590bd59..a7822d9 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,13 @@ bash install_web_control.sh - **실시간 상태 모니터링**: 서비스 상태 실시간 확인 - **로그 뷰어**: 시스템 로그 확인 기능 +### RDP 제어 스크립트 (신규) +- **명령줄 제어**: 터미널에서 간편한 RDP 제어 +- **상태 모니터링**: 실시간 연결 상태 확인 +- **로그 관리**: RDP 연결 로그 확인 기능 +- **자동 재시작**: 연결 문제 시 자동 재시작 +- **사용자 친화적**: 컬러 출력 및 직관적 명령어 + ## 🎯 지원 환경 - **OS**: Proxmox VE 8.x 이상 (Debian 기반) @@ -133,10 +140,31 @@ bash uninstall_web_control.sh ## 🔍 서비스 관리 명령어 -### RDP 자동 로그인 +### RDP 제어 스크립트 (권장) +```bash +# RDP 자동 연결 시작 +bash rdp-control.sh start + +# RDP 자동 연결 중지 +bash rdp-control.sh stop + +# RDP 연결 상태 확인 +bash rdp-control.sh status + +# RDP 자동 연결 재시작 +bash rdp-control.sh restart + +# RDP 로그 확인 +bash rdp-control.sh logs + +# 도움말 보기 +bash rdp-control.sh help +``` + +### systemd 서비스 직접 제어 ```bash # 상태 확인 -systemctl status xrdp-autologin.service +systemctl status getty@tty1.service # 서비스 재시작 systemctl restart xrdp @@ -144,6 +172,7 @@ systemctl restart xrdp-sesman # 로그 확인 journalctl -u xrdp -f +journalctl -u getty@tty1.service -f ``` ### 웹 제어 패널 diff --git a/rdp-control.sh b/rdp-control.sh new file mode 100755 index 0000000..981512c --- /dev/null +++ b/rdp-control.sh @@ -0,0 +1,259 @@ +#!/bin/bash + +# RDP Auto-Connect Control Script +# RDP 자동 연결을 켜고 끄는 제어 스크립트 + +set -euo pipefail + +# 색상 코드 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +CYAN='\033[0;36m' +NC='\033[0m' + +# RDP 설정 변수 +RDP_SERVER="ysleadersos.com:6642" +RDP_USER="doctor-03" +RDP_PASSWORD="@flejtm301" +LOCAL_USER="rdpuser" + +# 로그 함수 +msg_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +msg_ok() { + echo -e "${GREEN}[OK]${NC} $1" +} + +msg_error() { + echo -e "${RED}[ERROR]${NC} $1" + exit 1 +} + +msg_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +# 도움말 출력 +show_help() { + echo -e "${CYAN}RDP Auto-Connect Control Script${NC}" + echo "" + echo "사용법:" + echo " $0 start - RDP 자동 연결 시작" + echo " $0 stop - RDP 자동 연결 중지" + echo " $0 status - RDP 연결 상태 확인" + echo " $0 restart - RDP 자동 연결 재시작" + echo "" + echo "설정 정보:" + echo " RDP 서버: $RDP_SERVER" + echo " RDP 사용자: $RDP_USER" + echo " 로컬 사용자: $LOCAL_USER" + echo "" +} + +# 상태 확인 +check_status() { + local rdp_running=false + local x_running=false + local getty_enabled=false + + # RDP 프로세스 확인 + if pgrep -f "xfreerdp3.*$RDP_SERVER" >/dev/null 2>&1; then + rdp_running=true + fi + + # X 서버 확인 + if pgrep -f "Xorg.*tty1" >/dev/null 2>&1; then + x_running=true + fi + + # getty 서비스 확인 + if systemctl is-enabled getty@tty1.service >/dev/null 2>&1; then + getty_enabled=true + fi + + echo -e "${CYAN}=== RDP 자동 연결 상태 ===${NC}" + echo "" + + if $getty_enabled; then + echo -e "자동 로그인: ${GREEN}활성화${NC}" + else + echo -e "자동 로그인: ${RED}비활성화${NC}" + fi + + if $x_running; then + echo -e "X 서버: ${GREEN}실행 중${NC}" + else + echo -e "X 서버: ${RED}중지됨${NC}" + fi + + if $rdp_running; then + echo -e "RDP 연결: ${GREEN}연결됨${NC}" + echo -e "연결 정보: ${YELLOW}$RDP_USER@$RDP_SERVER${NC}" + else + echo -e "RDP 연결: ${RED}연결 안됨${NC}" + fi + + echo "" + + # 로그 파일 정보 + if [ -f "/home/$LOCAL_USER/rdp.log" ]; then + local log_lines=$(wc -l < "/home/$LOCAL_USER/rdp.log" 2>/dev/null || echo "0") + echo "RDP 로그: $log_lines 줄 (/home/$LOCAL_USER/rdp.log)" + fi + + if [ -f "/home/$LOCAL_USER/rdp-error.log" ]; then + local error_lines=$(wc -l < "/home/$LOCAL_USER/rdp-error.log" 2>/dev/null || echo "0") + echo "에러 로그: $error_lines 줄 (/home/$LOCAL_USER/rdp-error.log)" + fi + + echo "" + + # 전체 상태 요약 + if $getty_enabled && $rdp_running; then + echo -e "전체 상태: ${GREEN}정상 작동 중${NC}" + elif $getty_enabled && ! $rdp_running; then + echo -e "전체 상태: ${YELLOW}시작 중 또는 연결 실패${NC}" + else + echo -e "전체 상태: ${RED}비활성화됨${NC}" + fi +} + +# RDP 자동 연결 시작 +start_rdp() { + msg_info "RDP 자동 연결을 시작합니다..." + + # 이미 실행 중인지 확인 + if systemctl is-active getty@tty1.service >/dev/null 2>&1; then + msg_warn "RDP 자동 연결이 이미 활성화되어 있습니다." + return 0 + fi + + # getty 서비스 활성화 + systemctl unmask getty@tty1.service >/dev/null 2>&1 || true + systemctl enable getty@tty1.service >/dev/null 2>&1 + systemctl start getty@tty1.service + + msg_ok "RDP 자동 연결이 시작되었습니다." + + # 연결 상태 확인 (최대 10초 대기) + msg_info "RDP 연결을 확인하는 중..." + for i in {1..10}; do + sleep 1 + if pgrep -f "xfreerdp3.*$RDP_SERVER" >/dev/null 2>&1; then + msg_ok "RDP 연결이 성공적으로 설정되었습니다." + return 0 + fi + echo -n "." + done + echo "" + + msg_warn "RDP 연결 확인에 시간이 걸리고 있습니다. 로그를 확인하세요:" + echo " tail -f /home/$LOCAL_USER/rdp.log" + echo " tail -f /home/$LOCAL_USER/rdp-error.log" +} + +# RDP 자동 연결 중지 +stop_rdp() { + msg_info "RDP 자동 연결을 중지합니다..." + + # RDP 프로세스 종료 + if pgrep -f "xfreerdp3" >/dev/null 2>&1; then + msg_info "RDP 연결을 종료하는 중..." + pkill -f "xfreerdp3" 2>/dev/null || true + sleep 2 + fi + + # X 서버 종료 + if pgrep -f "Xorg.*tty1" >/dev/null 2>&1; then + msg_info "X 서버를 종료하는 중..." + pkill -f "Xorg.*tty1" 2>/dev/null || true + sleep 2 + fi + + # getty 서비스 중지 및 비활성화 + systemctl stop getty@tty1.service 2>/dev/null || true + systemctl disable getty@tty1.service 2>/dev/null || true + + msg_ok "RDP 자동 연결이 중지되었습니다." + + # 프로세스 확인 + if ! pgrep -f "xfreerdp3" >/dev/null 2>&1; then + msg_ok "모든 RDP 프로세스가 정상적으로 종료되었습니다." + else + msg_warn "일부 RDP 프로세스가 아직 실행 중일 수 있습니다." + fi +} + +# RDP 자동 연결 재시작 +restart_rdp() { + msg_info "RDP 자동 연결을 재시작합니다..." + stop_rdp + sleep 3 + start_rdp +} + +# 로그 보기 +show_logs() { + echo -e "${CYAN}=== RDP 로그 (최근 20줄) ===${NC}" + if [ -f "/home/$LOCAL_USER/rdp.log" ]; then + tail -20 "/home/$LOCAL_USER/rdp.log" 2>/dev/null || echo "로그 파일을 읽을 수 없습니다." + else + echo "로그 파일이 없습니다." + fi + + echo "" + echo -e "${CYAN}=== RDP 에러 로그 (최근 10줄) ===${NC}" + if [ -f "/home/$LOCAL_USER/rdp-error.log" ]; then + tail -10 "/home/$LOCAL_USER/rdp-error.log" 2>/dev/null || echo "에러 로그 파일을 읽을 수 없습니다." + else + echo "에러 로그 파일이 없습니다." + fi +} + +# 메인 함수 +main() { + # root 권한 확인 + if [ "$EUID" -ne 0 ]; then + msg_error "이 스크립트는 root 권한으로 실행해야 합니다." + fi + + case "${1:-}" in + "start") + start_rdp + echo "" + check_status + ;; + "stop") + stop_rdp + echo "" + check_status + ;; + "status") + check_status + ;; + "restart") + restart_rdp + echo "" + check_status + ;; + "logs") + show_logs + ;; + "help"|"-h"|"--help") + show_help + ;; + *) + echo -e "${RED}잘못된 명령입니다.${NC}" + echo "" + show_help + exit 1 + ;; + esac +} + +# 스크립트 실행 +main "$@" \ No newline at end of file