php - 在 php 中运行带有 "xte command"的 bash 文件

标签 php linux bash

对于我的项目,我需要通过 php 运行位于 ubuntu 服务器上的 bash 脚本。

这是我的 sh 脚本:test1.sh

#!/bin/bash
xte 'keydown Control_L' 'keydown Alt_L' 'key l' 'keyup Alt_L' 'keyup Control_L' 

我的 php 文件是:bashTest1.php

<?php
$message = shell_exec("bash test1.sh 2>&1");
echo $message;
?>

但是当我在浏览器中打开 php 页面时,我得到这个错误:

Unable to open display 'default'

“test1.sh”中的“xte”命令基本上执行 Ctlr+Alt+L 虚拟操作。 我已经检查了“test1.sh”的文件权限。没关系。我已经在它正在运行的终端中运行了 bash 文件。 我还在同一个“test1.sh”文件中检查了“ls”命令,它在我的浏览器中显示了该目录中的所有文件。 你能帮我在我的 php 脚本中运行这个命令吗?

提前谢谢大家!

我终于解决了这个问题。在 Ubuntu 中,每个用户都有一个 DISPLAY。在我的 bash 文件中,我首先必须指定我需要在哪个 DISPLAY 上执行命令。最后我需要授予 php 用户执行命令的权限。最后我的 bash 文件看起来像这样:

#!/bin/bash
export DISPLAY=":0"
xhost +
xte 'keydown Control_L' 'keydown Alt_L' 'key l' 'keyup Alt_L' 'keyup Control_L'

注意:请记住先检查用户的显示器。因为不同的用户会得到不同的 DISPLAYS。您可以在终端中通过此命令检查您的用户显示

who

最佳答案

你错过了两件事:

  1. X 显示的地址需要通过-x 参数传递给xte,或者设置为DISPLAY 环境变量.
  2. XAUTHORITY 环境变量需要使用您的 X 显示器的魔术 cookie 进行设置。

This answer有更多信息。

关于php - 在 php 中运行带有 "xte command"的 bash 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35687082/

相关文章:

php - 在 PHP 中的日期数组中填充空日期

php - 错误 500 在 Linux Apache 上最后 1 分钟之后

php - 如何在不转义斜杠的情况下进行 json_encode?

php - MongoDB:集合中的重复文档

php - Xampp Phpmyadmin 停止工作

linux - 遇到 "find:/data/cdr/cdr-ivr.log: No such file or directory"后 Bash 脚本退出

linux - 重定向/管道 wget 下载直接进入 gunzip

bash - 使用/bin/bash -c &lt;script&gt; 时的空位置参数

linux - bash 脚本将文本文件中的纪元转换为标准

mysql - MySQL密码中括号的使用