Advertisement
egor230

start virulbox.py

May 7th, 2024
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.48 KB | None | 0 0
  1. import re, subprocess, time
  2.  
  3. # Скрипт для получения текущего имени пользователя в системе
  4. get_user_name = f'''#!/bin/bash
  5. current_user=$(whoami); # Получение имени текущего пользователя
  6. echo $current_user # Вывод имени пользователя
  7. exit; # Завершение выполнения скрипта
  8. '''
  9. # Выполнение скрипта и сохранение имени пользователя в переменную 'user'
  10. user = subprocess.run(['bash'], input=get_user_name , stdout=subprocess.PIPE, text=True).stdout.strip()
  11.  
  12. # Скрипт для ожидания 1 секунды, вывода информации о процессах и ожидания еще 1 секунды
  13. script1 = f'''#!/bin/bash
  14. sleep 1; # Ожидание в течение 1 секунды
  15. ps aux; # Вывод информации о текущих процессах в системе
  16. sleep 1; # Ожидание еще в течение 1 секунды
  17. exit # Завершение скрипта
  18. '''
  19.  
  20. # Скрипт для получения ID активного окна и ID процесса активного окна
  21. script2 = f'''#!/bin/bash
  22. active_window_id=$(xdotool getactivewindow) # Получение ID активного окна
  23. # Получение ID процесса, связанного с активным окном
  24. process_id_active=$(xdotool getwindowpid $active_window_id)
  25. # Вывод информации о ID активного окна и его процесса
  26. echo "Active Window ID: $active_window_id"
  27. echo "Process ID of Active Window: $process_id_active"
  28. exit # Завершение скрипта
  29. '''
  30.  
  31. # Функция для проверки, соответствует ли активное окно определенному процессу пользователя
  32. def check_current_active_window(user, system_user):
  33. active_window_id = subprocess.check_output(['xdotool', 'getactivewindow']).decode().strip()
  34. process_id = subprocess.check_output(['xdotool', 'getwindowpid', active_window_id]).decode().strip()
  35. process_id = int(process_id)
  36.  
  37. try:
  38. result = str(subprocess.run(['bash'], input=script1, stdout=subprocess.PIPE, text=True).stdout)
  39. # Поиск информации о процессе на основании имени пользователя и процесса активного окна
  40. for line in result.split("\n"):
  41. user_name = ' '.join(line.split()[0]).replace(" ", "")
  42. # Получение названия процесса и ID процесса
  43. process_name = ' '.join(line.split()[10:])
  44. if user_name==user: # Сравнение имени пользователя из списка процессов с заданным именем пользователя
  45. filename = process_name.split('\\')[-1]
  46. pid_id = int(line.split()[1]) # Получение ID процесса из строки
  47. # Условие для проверки совпадения окна и процесса
  48. if system_user in filename :#and process_id == pid_id:
  49. # print(pid_id)
  50. # move_windows = f'''#!/bin/bash
  51. # xdotool key F2;
  52. # '''.format()
  53. # subprocess.call(['bash', '-c', move_windows])
  54. return True
  55. except:
  56. pass # Игнорирование ошибки, если проверка не удалась
  57.  
  58.  
  59. start = f'''#!/bin/bash
  60. wmctrl -s 1
  61. sudo modprobe -r kvm_intel
  62. sudo modprobe -r kvm
  63. VBoxManage modifyvm "7" --nested-hw-virt on
  64. VBoxManage modifyvm "win 10" --nested-hw-virt on
  65. VBoxManage startvm "win 10"
  66. wmctrl -s 0
  67. '''
  68.  
  69. if not check_current_active_window(user, "win 10"):
  70. subprocess.call(['bash', '-c', start])
  71.  
  72.  
  73. launcher = f'''#!/bin/bash
  74. rdesktop -u egor -p 1 192.168.0.11
  75. '''
  76. # Бесконечный цикл до успешного выполнения
  77. while 1:
  78. # Запуск команды в Bash
  79. exit_code = subprocess.call(['bash', '-c', launcher])
  80.  
  81. # Проверка результата выполнения
  82. if exit_code == 0:
  83. break
  84. else:
  85. # Ожидание перед следующей попыткой, чтобы избежать чрезмерной нагрузки
  86. time.sleep(10)
  87.  
  88. # После выхода из цикла сообщаем о успешном завершении
  89. print("Команда 'rdesktop' успешно выполнена!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement