Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re, subprocess, time
- # Скрипт для получения текущего имени пользователя в системе
- get_user_name = f'''#!/bin/bash
- current_user=$(whoami); # Получение имени текущего пользователя
- echo $current_user # Вывод имени пользователя
- exit; # Завершение выполнения скрипта
- '''
- # Выполнение скрипта и сохранение имени пользователя в переменную 'user'
- user = subprocess.run(['bash'], input=get_user_name , stdout=subprocess.PIPE, text=True).stdout.strip()
- # Скрипт для ожидания 1 секунды, вывода информации о процессах и ожидания еще 1 секунды
- script1 = f'''#!/bin/bash
- sleep 1; # Ожидание в течение 1 секунды
- ps aux; # Вывод информации о текущих процессах в системе
- sleep 1; # Ожидание еще в течение 1 секунды
- exit # Завершение скрипта
- '''
- # Скрипт для получения ID активного окна и ID процесса активного окна
- script2 = f'''#!/bin/bash
- active_window_id=$(xdotool getactivewindow) # Получение ID активного окна
- # Получение ID процесса, связанного с активным окном
- process_id_active=$(xdotool getwindowpid $active_window_id)
- # Вывод информации о ID активного окна и его процесса
- echo "Active Window ID: $active_window_id"
- echo "Process ID of Active Window: $process_id_active"
- exit # Завершение скрипта
- '''
- # Функция для проверки, соответствует ли активное окно определенному процессу пользователя
- def check_current_active_window(user, system_user):
- active_window_id = subprocess.check_output(['xdotool', 'getactivewindow']).decode().strip()
- process_id = subprocess.check_output(['xdotool', 'getwindowpid', active_window_id]).decode().strip()
- process_id = int(process_id)
- try:
- result = str(subprocess.run(['bash'], input=script1, stdout=subprocess.PIPE, text=True).stdout)
- # Поиск информации о процессе на основании имени пользователя и процесса активного окна
- for line in result.split("\n"):
- user_name = ' '.join(line.split()[0]).replace(" ", "")
- # Получение названия процесса и ID процесса
- process_name = ' '.join(line.split()[10:])
- if user_name==user: # Сравнение имени пользователя из списка процессов с заданным именем пользователя
- filename = process_name.split('\\')[-1]
- pid_id = int(line.split()[1]) # Получение ID процесса из строки
- # Условие для проверки совпадения окна и процесса
- if system_user in filename :#and process_id == pid_id:
- # print(pid_id)
- # move_windows = f'''#!/bin/bash
- # xdotool key F2;
- # '''.format()
- # subprocess.call(['bash', '-c', move_windows])
- return True
- except:
- pass # Игнорирование ошибки, если проверка не удалась
- start = f'''#!/bin/bash
- wmctrl -s 1
- sudo modprobe -r kvm_intel
- sudo modprobe -r kvm
- VBoxManage modifyvm "7" --nested-hw-virt on
- VBoxManage modifyvm "win 10" --nested-hw-virt on
- VBoxManage startvm "win 10"
- wmctrl -s 0
- '''
- if not check_current_active_window(user, "win 10"):
- subprocess.call(['bash', '-c', start])
- launcher = f'''#!/bin/bash
- rdesktop -u egor -p 1 192.168.0.11
- '''
- # Бесконечный цикл до успешного выполнения
- while 1:
- # Запуск команды в Bash
- exit_code = subprocess.call(['bash', '-c', launcher])
- # Проверка результата выполнения
- if exit_code == 0:
- break
- else:
- # Ожидание перед следующей попыткой, чтобы избежать чрезмерной нагрузки
- time.sleep(10)
- # После выхода из цикла сообщаем о успешном завершении
- print("Команда 'rdesktop' успешно выполнена!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement