在工作中,我们使用docker容器在一台定制的Linux机器上运行我们的脚本,带有触摸屏显示器。我是那里的QA,我想创建一些自动化测试,应该执行虚拟触摸点击。
我的问题是,Linux机器只有基本的软件包,安装新的软件包真的很棘手。另外,为了避免操作系统本身的混乱,我也想在Docker容器中使用我的自动化脚本。这也会给我给予机会来测试不同的软件包。
我想使用pyautogui
来模拟触摸屏上的输入(我知道这并不像听起来那么容易,这是有原因的)。目前,我坚持让docker容器访问屏幕。当我运行一个简单的测试脚本时,我得到了以下两个错误消息
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/Xlib/support/unix_connect.py", line 76, in get_socket
s.connect('/tmp/.X11-unix/X%d' % dno)
ConnectionRefusedError: [Errno 111] Connection refused
个字符
所以我知道问题出在X11的限制上。我尝试了在网上找到的不同解决方案,但都不起作用。我的下一步是了解更多关于X11
的信息以及它是如何工作的,但这可能需要一些时间。
也许你们中的一些人有一个解决方案或更好的方法来做到这一点。我也道歉,如果我混淆了一些与这些主题有关的名字。
我的Dockerfile
看起来像这样:
FROM ubuntu:latest as notebook
WORKDIR /automation_test
COPY /src /automation_test/src
RUN apt update && apt-get update
RUN apt -y install python3 python3-pip
RUN pip install --upgrade pip
RUN pip install -r src/requirements.txt
RUN apt-get -y install -y wget
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update && apt-get -y install google-chrome-stable
RUN apt-get -y install x11-apps
RUN apt-get -y install xauth
RUN apt-get -y install openbox
RUN mkdir /root/.Xauthority
RUN HOST=cctv
RUN DISPLAY_NUMBER=$(echo $DISPLAY | cut -d. -f1 | cut -d: -f2)
RUN AUTH_COOKIE=$(xauth list | grep "$(hostname)/unix:${DISPLAY_NUMBER} " | awk '{print $3}')
RUN xauth add ${HOST}/unix: ${DISPLAY_NUMBER} MIT-MAGIC-COOKIE-1 ${AUTH_COOKIE}
...
型
我的docker-compose.yaml
是这样的:
version: '3.6'
x-base: &base
ipc: host
pid: host
privileged: true
network_mode: host
volumes:
- ./src/results:/automation_test/src/results
- ./src/tmp:/automation_test/src/tmp
- /tmp/.X11-unix:/tmp/.X11-unix
environment:
- DISPLAY=${DISPLAY}
extra_hosts:
- "host.docker.internal:host-gateway"
services:
notebook:
<<: *base
image: notebook
container_name: notebook
build:
context: .
target: notebook
command: ["/bin/bash"]
型Disclaimer:
这些文件中的大多数内容都是我尝试过的解决方案,但没有工作。所以这就是它看起来有点丑陋和混乱的原因。我目前使用的是Ubuntu基础映像。将来我想只使用Python映像作为基础。
2条答案
按热度按时间bihw5rsg1#
你可以这样做x转发:
字符串
一旦成功,你就可以将其集成到你的docker-compose工作流中。
7lrncoxx2#
更新:
我必须纠正自己。我在这里提到的软件包也不是很有帮助。但是我发现了一个非常有趣的软件包,叫做python-evdev。我很惊讶我没有早点找到这个软件包,也没有那么多网站提到它。这有点难以理解,因为文档有点粗糙,但它就像一个魅力,我想做什么。
原件:
所以我得出的结论是,我的这个项目太复杂了,现在无法解决。我也注意到,它首先不会工作,因为我想运行仓库的Linux机器甚至没有
X11
(可以诚实地首先检查)。一个同事实际上给了我一个更好的方法来处理这个主题。他发现了this repository,它直接与内核本身和this一起工作。
我认为这是一个比在Docker中运行X11更好的解决方案。
不管怎样,谢谢你的帮助和时间。我很感激。