기타(공개)
Python으로 VirtualBox 제어
jang재범
2021. 8. 22. 14:30
1. pip install virtualbox
2. 코드 예제 (에러 발생 시 아래 참조)
import virtualbox
from vboxapi import VirtualBoxManager
MachineName = 'window10_test'
mgr = VirtualBoxManager(None, None)
vbox = mgr.getVirtualBox()
machine = vbox.findMachine(MachineName)
session = mgr.getSessionObject(vbox)
machine.LockMachine(session, mgr.constants.LockType_Shared)
####################################
########################## 키보드
####################################
scancode = 0x1e # a 키 스캔코드값
session.Console.Keyboard.PutScancode(scancode) # 키 입력을 지속적으로 넣음.
session.Console.Keyboard.PutScancode(scancode + 0x80) # 키 입력 중단
# https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html 참조
# 화살표키 위 delete 키 구현.
# 0xe0 키 없이 0x53만 하면. 숫자패드 쪽에 있는 ./delete키로 인식됨.
session.Console.Keyboard.PutScancode(0xe0)
sleep(0.1)
session.Console.Keyboard.PutScancode(0x53)
sleep(0.1)
session.Console.Keyboard.PutScancode(0xe0)
sleep(0.1)
session.Console.Keyboard.PutScancode(0x53 + 0x80)
### 숫자패드쪽 Delete 키를 누르려면 NumLock을 한 번 누르고 뗀 후(토글), 0x53을 눌러야함.
### NumLock : 0x45
####################################
############################ 마우스
####################################
# http://download.virtualbox.org/virtualbox/SDKRef.pdf
# 커서 이동??
x, y = 20, 20
session.console.Mouse.putMouseEventAbsolute(x, y, 0, 0, 0) # 20, 20 이동
session.console.Mouse.putMouseEventAbsolute(x, y, 0, 0, 1) # 20, 20 왼쪽 버튼 클릭
session.console.Mouse.putMouseEventAbsolute(x, y, 0, 0, 2) # 20, 20 오른쪽 버튼 클릭
2-1. import virtualobx에서 vboxapi 에러.
https://github.com/GreatFruitOmsk/vboxapi-py3 설치.
2-1. mgr = VirtualBoxManager(None, None) 에서 virtualbox com_error: (-2147221008, 'CoInitialize ~~ 에러.
import pythoncom
pythoncom.CoInitialize()
2-1 Jupyter에서 이유 모르게 커널이 죽는다. 또는 큰 셀의 코드를 실행하면 코드가 제대로 실행되지 않고 죽는다.
2-1-1 jupyter_notebook_config.py 수정
<jupyter_notebook_config.py>
max_buffer_size를 늘린다.
저 같은 경우, 기본 512MB였고, 1GB로 늘렸지만 계속 죽음... 효과가 있는지는 잘..
c.NotebookApp.max_buffer_size = 2**33 # 8GB
2-1-2 한 개의 cell에 있는 코드 줄 수를 줄인다. 여러 cell로 쪼갠다.
- 이 방법으로 하는 중. 또는 코드를 클래스화해서 .py 파일로 만든 후, 임포트하는 방식으로한다.
vboxpai를 따로 설치해줘야한다던지..
키입력 멈추기 위해선 0x80을 붙여서 입력해줘야한다던지.
0xe0 키의 존재라던지.
잘 되던 코드가 갑자기 virtualbox com_error 에러를 띄운다던지..
커널이 계속 죽는다던지..
고생 좀 했네요.
잘못된 부분이 있으면 댓글 달아주세요.