ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python으로 VirtualBox 제어
    기타(공개) 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 에러를 띄운다던지..

    커널이 계속 죽는다던지..

    고생 좀 했네요.

     

     

     

    잘못된 부분이 있으면 댓글 달아주세요.

    댓글

Designed by Tistory.