-su: /usr/bin/locale-check: No such file or directory

本文解决了一个在Ubuntu系统中切换用户时遇到的locale-check命令找不到文件或目录的问题。通过更新和升级软件包,使用sudo apt update && sudo apt upgrade命令,如果仍然存在问题,可以加上--fix-missing选项。此解决方案确保了用户切换过程的正常进行。
[root@yfw ~]# cd /etc/systemd/system [root@yfw system]# su -s /bin/sh -c " > export OPENFIRE_HOME='$OPENFIRE_HOME'; > export JAVA_HOME='$JAVA_HOME'; > export PATH='$JAVA_HOME/bin:\$PATH'; > cd '$OPENFIRE_HOME'; > > echo 'DEBUG: User = $(whoami)'; > echo 'DEBUG: Current dir = $(pwd)'; > echo 'DEBUG: OPENFIRE_HOME = \$OPENFIRE_HOME'; > echo 'DEBUG: Java executable = $(which java)'; > '\$JAVA' -version; > > echo 'DEBUG: Launching with explicit -DopenfireHome...'; > exec '\$JAVA' \ > -server \ > -Xms64m \ > -Xmx512m \ > -DopenfireHome='\$OPENFIRE_HOME' \ > -Dopenfire.lib.dir='\$OPENFIRE_HOME/lib' \ > -Dlog4j.configurationFile='file://\$OPENFIRE_HOME/lib/log4j2.xml' \ > -classpath '\$CP' \ > org.jivesoftware.openfire.starter.ServerStarter > " openfire >> "$LOG_FILE" 2>&1 & [1] 1101325 [root@yfw system]# -bash: : No such file or directory [1]+ Exit 1 su -s /bin/sh -c " export OPENFIRE_HOME='$OPENFIRE_HOME'; export JAVA_HOME='$JAVA_HOME'; export PATH='$JAVA_HOME/bin:\$PATH'; cd '$OPENFIRE_HOME'; echo 'DEBUG: User = $(whoami)'; echo 'DEBUG: Current dir = $(pwd)'; echo 'DEBUG: OPENFIRE_HOME = \$OPENFIRE_HOME'; echo 'DEBUG: Java executable = $(which java)'; '\$JAVA' -version; echo 'DEBUG: Launching with explicit -DopenfireHome...'; exec '\$JAVA' -server -Xms64m -Xmx512m -DopenfireHome='\$OPENFIRE_HOME' -Dopenfire.lib.dir='\$OPENFIRE_HOME/lib' -Dlog4j.configurationFile='file://\$OPENFIRE_HOME/lib/log4j2.xml' -classpath '\$CP' org.jivesoftware.openfire.starter.ServerStarter " openfire >> "$LOG_FILE" 2>&1 [root@yfw system]# cat > /tmp/CheckHome.java << 'EOF' > public class CheckHome { > public static void main(String[] args) { > String home = System.getProperty("openfireHome"); > if (home == null || home.trim().isEmpty()) { > System.err.println("❌ FAIL: -DopenfireHome is NOT set!"); > System.exit(1); > } else { > System.out.println("✅ SUCCESS: -DopenfireHome = " + home); > System.out.println("👉 File exists: " + new java.io.File(home).exists()); > System.out.println("👉 Is Directory: " + new java.io.File(home).isDirectory()); > System.out.println("👉 Can Read: " + new java.io.File(home).canRead()); > System.out.println("👉 Can Write: " + new java.io.File(home).canWrite()); > } > } > } > EOF [root@yfw system]# javac /tmp/CheckHome.java [root@yfw system]# sudo -u openfire java -cp /tmp -DopenfireHome=/opt/openfire CheckHome ✅ SUCCESS: -DopenfireHome = /opt/openfire 👉 File exists: true 👉 Is Directory: true 👉 Can Read: true 👉 Can Write: true [root@yfw system]# sudo mkdir -p /opt/openfire/conf [root@yfw system]# sudo chown openfire:openfire /opt/openfire/conf [root@yfw system]# sudo chmod 755 /opt/openfire/conf [root@yfw system]# sudo -u openfire touch /opt/openfire/conf/test && echo OK || echo FAIL OK [root@yfw system]# sudo -u openfire rm /opt/openfire/conf/test [root@yfw system]# sudo cat > /opt/openfire/bin/start.sh << 'EOF' > #!/bin/bash > > export OPENFIRE_HOME="/opt/openfire" > export JAVA_HOME="/usr/lib/jvm/java-17-openjdk" > export JAVA="$JAVA_HOME/bin/java" > export LOG_FILE="$OPENFIRE_HOME/logs/nohup.out" > > # 构建 classpath > CP="" > for jar in "$OPENFIRE_HOME/lib"/*.jar; do > if [ -f "$jar" ]; then > CP="$CP:$jar" > fi > done > CP="${CP#:}" > > cd "$OPENFIRE_HOME" || { echo "Cannot access $OPENFIRE_HOME"; exit 1; } > > > "$LOG_FILE" > > echo "Using Java: $JAVA" > echo "Java Version:" > "$JAVA" -version 2>&1 | sed 's/^/ /' > > echo "Classpath: $CP" > echo "Starting OpenFire..." > > su -s /bin/sh -c " > export OPENFIRE_HOME='$OPENFIRE_HOME'; > export JAVA_HOME='$JAVA_HOME'; > export PATH='$JAVA_HOME/bin:\$PATH'; > cd '\$OPENFIRE_HOME'; > > echo 'DEBUG: User = \$(whoami)'; > echo 'DEBUG: Current dir = \$(pwd)'; > echo 'DEBUG: OPENFIRE_HOME = \$OPENFIRE_HOME'; > echo 'DEBUG: Testing -DopenfireHome visibility...'; > '\$JAVA' -cp '/tmp' -DopenfireHome='\$OPENFIRE_HOME' CheckHome; > > echo 'Starting OpenFire正式启动...'; > exec '\$JAVA' \ > -server \ > -Xms64m \ > -Xmx512m \ > -DopenfireHome='\$OPENFIRE_HOME' \ > -Dopenfire.lib.dir='\$OPENFIRE_HOME/lib' \ > -Dopenfire.config.file='\$OPENFIRE_HOME/conf/openfire.xml' \ > -Dlog4j.configurationFile='file://\$OPENFIRE_HOME/lib/log4j2.xml' \ > -classpath '\$CP' \ > org.jivesoftware.openfire.starter.ServerStarter > " openfire >> "$LOG_FILE" 2>&1 & > > echo $! > "$OPENFIRE_HOME/logs/openfire.pid" > echo "OpenFire started (PID $!)" > echo "Check logs: tail -f $LOG_FILE" > EOF [root@yfw system]# sudo -u openfire tee /opt/openfire/conf/openfire.xml > /dev/null << 'EOF' > <?xml version="1.0" encoding="UTF-8"?> > <jive> > <adminConsole> > <port>9090</port> > <securePort>9091</securePort> > </adminConsole> > <locale>en</locale> > <setup>true</setup> > </jive> > EOF [root@yfw system]# # 给 start.sh 添加可执行权限 [root@yfw system]# sudo chmod +x /opt/openfire/bin/start.sh [root@yfw system]# [root@yfw system]# # 启动服务 [root@yfw system]# /opt/openfire/bin/start.sh Using Java: /usr/lib/jvm/java-17-openjdk/bin/java Java Version: openjdk version "17.0.1" 2021-10-19 LTS OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS) OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing) Classpath: /opt/openfire/lib/activation-1.1.jar:/opt/openfire/lib/apache-el-9.0.107.jar:/opt/openfire/lib/apache-jsp-9.0.107.jar:/opt/openfire/lib/asm-9.8.jar:/opt/openfire/lib/asm-commons-9.8.jar:/opt/openfire/lib/asm-tree-9.8.jar:/opt/openfire/lib/bcpg-jdk18on-1.78.1.jar:/opt/openfire/lib/bcpkix-jdk18on-1.78.1.jar:/opt/openfire/lib/bcprov-jdk18on-1.78.1.jar:/opt/openfire/lib/bcutil-jdk18on-1.78.1.jar:/opt/openfire/lib/caffeine-3.2.0.jar:/opt/openfire/lib/checker-qual-3.33.0.jar:/opt/openfire/lib/common-image-3.9.4.jar:/opt/openfire/lib/common-io-3.9.4.jar:/opt/openfire/lib/common-lang-3.9.4.jar:/opt/openfire/lib/commons-codec-1.15.jar:/opt/openfire/lib/commons-dbcp2-2.9.0.jar:/opt/openfire/lib/commons-ip-math-1.32.jar:/opt/openfire/lib/commons-lang3-3.18.0.jar:/opt/openfire/lib/commons-logging-1.2.jar:/opt/openfire/lib/commons-pool2-2.9.0.jar:/opt/openfire/lib/commons-text-1.10.0.jar:/opt/openfire/lib/dom4j-2.1.4.jar:/opt/openfire/lib/dwr-3.0.2-RELEASE.jar:/opt/openfire/lib/ecj-3.33.0.jar:/opt/openfire/lib/error_prone_annotations-2.18.0.jar:/opt/openfire/lib/failureaccess-1.0.1.jar:/opt/openfire/lib/guava-32.0.1-jre.jar:/opt/openfire/lib/hsqldb-2.7.1.jar:/opt/openfire/lib/httpclient-4.5.13.jar:/opt/openfire/lib/httpcore-4.4.13.jar:/opt/openfire/lib/i18n-5.0.2.jar:/opt/openfire/lib/imageio-bmp-3.9.4.jar:/opt/openfire/lib/imageio-core-3.9.4.jar:/opt/openfire/lib/istack-commons-runtime-3.0.11.jar:/opt/openfire/lib/j2objc-annotations-2.8.jar:/opt/openfire/lib/jakarta.activation-1.2.2.jar:/opt/openfire/lib/jakarta.annotation-api-1.3.5.jar:/opt/openfire/lib/jakarta.transaction-api-1.3.3.jar:/opt/openfire/lib/jakarta.xml.bind-api-2.3.3.jar:/opt/openfire/lib/jansi-1.18.jar:/opt/openfire/lib/javax.activation-api-1.2.0.jar:/opt/openfire/lib/javax.mail-1.6.2.jar:/opt/openfire/lib/jaxb-api-2.3.1.jar:/opt/openfire/lib/jaxb-runtime-2.3.3.jar:/opt/openfire/lib/jaxen-1.2.0.jar:/opt/openfire/lib/jcip-annotations-1.0.jar:/opt/openfire/lib/jcl-over-slf4j-2.0.9.jar:/opt/openfire/lib/jetty-ee-12.0.24.jar:/opt/openfire/lib/jetty-ee8-annotations-12.0.24.jar:/opt/openfire/lib/jetty-ee8-apache-jsp-12.0.24.jar:/opt/openfire/lib/jetty-ee8-nested-12.0.24.jar:/opt/openfire/lib/jetty-ee8-plus-12.0.24.jar:/opt/openfire/lib/jetty-ee8-security-12.0.24.jar:/opt/openfire/lib/jetty-ee8-servlet-12.0.24.jar:/opt/openfire/lib/jetty-ee8-webapp-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-jetty-api-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-jetty-common-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-jetty-server-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-servlet-12.0.24.jar:/opt/openfire/lib/jetty-http-12.0.24.jar:/opt/openfire/lib/jetty-io-12.0.24.jar:/opt/openfire/lib/jetty-jmx-12.0.24.jar:/opt/openfire/lib/jetty-jndi-12.0.24.jar:/opt/openfire/lib/jetty-plus-12.0.24.jar:/opt/openfire/lib/jetty-security-12.0.24.jar:/opt/openfire/lib/jetty-server-12.0.24.jar:/opt/openfire/lib/jetty-servlet-api-4.0.6.jar:/opt/openfire/lib/jetty-session-12.0.24.jar:/opt/openfire/lib/jetty-util-12.0.24.jar:/opt/openfire/lib/jetty-websocket-core-common-12.0.24.jar:/opt/openfire/lib/jetty-websocket-core-server-12.0.24.jar:/opt/openfire/lib/jetty-xml-12.0.24.jar:/opt/openfire/lib/jmdns-1.0.jar:/opt/openfire/lib/jsmpp-2.3.10.jar:/opt/openfire/lib/json-20231013.jar:/opt/openfire/lib/jspecify-1.0.0.jar:/opt/openfire/lib/jsr305-3.0.2.jar:/opt/openfire/lib/jtds-1.3.1.jar:/opt/openfire/lib/jzlib-1.1.3.jar:/opt/openfire/lib/libidn-1.35.jar:/opt/openfire/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/opt/openfire/lib/log4j-api-2.20.0.jar:/opt/openfire/lib/log4j-core-2.20.0.jar:/opt/openfire/lib/log4j-slf4j2-impl-2.20.0.jar:/opt/openfire/lib/mssql-jdbc-9.4.1.jre11.jar:/opt/openfire/lib/mysql-connector-j-8.2.0.jar:/opt/openfire/lib/netty-all-4.1.118.Final.jar:/opt/openfire/lib/netty-buffer-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-dns-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-haproxy-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-http2-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-http-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-memcache-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-mqtt-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-redis-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-smtp-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-socks-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-stomp-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-xml-4.1.118.Final.jar:/opt/openfire/lib/netty-common-4.1.118.Final.jar:/opt/openfire/lib/netty-handler-4.1.118.Final.jar:/opt/openfire/lib/netty-handler-proxy-4.1.118.Final.jar:/opt/openfire/lib/netty-handler-ssl-ocsp-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-dns-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-dns-classes-macos-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-dns-native-macos-4.1.118.Final-osx-aarch_64.jar:/opt/openfire/lib/netty-resolver-dns-native-macos-4.1.118.Final-osx-x86_64.jar:/opt/openfire/lib/netty-transport-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-classes-epoll-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-classes-kqueue-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-native-epoll-4.1.118.Final-linux-aarch_64.jar:/opt/openfire/lib/netty-transport-native-epoll-4.1.118.Final-linux-riscv64.jar:/opt/openfire/lib/netty-transport-native-epoll-4.1.118.Final-linux-x86_64.jar:/opt/openfire/lib/netty-transport-native-kqueue-4.1.118.Final-osx-aarch_64.jar:/opt/openfire/lib/netty-transport-native-kqueue-4.1.118.Final-osx-x86_64.jar:/opt/openfire/lib/netty-transport-native-unix-common-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-rxtx-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-sctp-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-udt-4.1.118.Final.jar:/opt/openfire/lib/ojdbc11-23.7.0.25.01.jar:/opt/openfire/lib/ons-23.7.0.25.01.jar:/opt/openfire/lib/oraclepki-23.7.0.25.01.jar:/opt/openfire/lib/orai18n-23.7.0.25.01.jar:/opt/openfire/lib/postgresql-42.7.7.jar:/opt/openfire/lib/rsi-23.7.0.25.01.jar:/opt/openfire/lib/shaj-0.5.jar:/opt/openfire/lib/simplefan-23.7.0.25.01.jar:/opt/openfire/lib/sitemesh-2.5.0.jar:/opt/openfire/lib/slf4j-api-2.0.9.jar:/opt/openfire/lib/startup.jar:/opt/openfire/lib/taglibs-standard-impl-1.2.5.jar:/opt/openfire/lib/taglibs-standard-spec-1.2.5.jar:/opt/openfire/lib/tinder-2.1.0.jar:/opt/openfire/lib/txw2-2.3.3.jar:/opt/openfire/lib/ucp-23.7.0.25.01.jar:/opt/openfire/lib/xdb-23.7.0.25.01.jar:/opt/openfire/lib/xmppserver-5.0.2.jar:/opt/openfire/lib/xpp3-1.1.4c.0.jar Starting OpenFire... OpenFire started (PID 1102358) Check logs: tail -f /opt/openfire/logs/nohup.out [root@yfw system]# tail -f /opt/openfire/logs/nohup.out sh: line 4: cd: $OPENFIRE_HOME: No such file or directory DEBUG: User = $(whoami) DEBUG: Current dir = $(pwd) DEBUG: OPENFIRE_HOME = $OPENFIRE_HOME DEBUG: Testing -DopenfireHome visibility... sh: line 10: $JAVA: command not found Starting OpenFire正式启动... sh: line 13: exec: $JAVA: not found
11-16
[root@yfw ~]# cd /opt/openfire/bin [root@yfw bin]# kill -9 1183108 [root@yfw bin]# lsof -i :9090 || echo "Port 9090 is now free" COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 1185283 openfire 151u IPv6 18970472 0t0 TCP *:websm (LISTEN) [root@yfw bin]# systemctl status openfire ● openfire.service - OpenFire XMPP Server Loaded: loaded (/etc/systemd/system/openfire.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2025-11-15 15:23:53 CST; 1min 39s ago Process: 1158688 ExecStop=/opt/openfire/bin/stop.sh (code=exited, status=0/SUCCESS) Main PID: 1185283 (java) Tasks: 34 (limit: 23712) Memory: 180.5M CGroup: /system.slice/openfire.service └─1185283 /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java -server -Xms64m -Xm> Nov 15 15:23:53 yfw.szrengjing.com systemd[1]: Started OpenFire XMPP Server. Nov 15 15:23:53 yfw.szrengjing.com start.sh[1185282]: Starting OpenFire server using Java: /usr/lib/jvm/j> Nov 15 15:23:53 yfw.szrengjing.com start.sh[1185282]: OpenFire started successfully (PID 1185283) Nov 15 15:23:53 yfw.szrengjing.com start.sh[1185282]: Log output: tail -f /opt/openfire/logs/nohup.out Nov 15 15:23:53 yfw.szrengjing.com start.sh[1185282]: Web Console: http://192.168.0.142 172.18.0.1 172.23> [root@yfw bin]# sudo systemctl stop openfire [root@yfw bin]# lsof -i :9090 || echo "Port 9090 is now free" Port 9090 is now free [root@yfw bin]# rm -f /opt/openfire/logs/openfire.pid [root@yfw bin]# > /opt/openfire/logs/nohup.out [root@yfw bin]# sudo systemctl start openfire [root@yfw bin]# systemctl status openfire ● openfire.service - OpenFire XMPP Server Loaded: loaded (/etc/systemd/system/openfire.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2025-11-15 15:28:48 CST; 11s ago Process: 1186273 ExecStop=/opt/openfire/bin/stop.sh (code=exited, status=0/SUCCESS) Main PID: 1186448 (java) Tasks: 37 (limit: 23712) Memory: 163.4M CGroup: /system.slice/openfire.service └─1186448 /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java -server -Xms64m -Xm> Nov 15 15:28:48 yfw.szrengjing.com systemd[1]: Started OpenFire XMPP Server. Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: Starting OpenFire server using Java: /usr/lib/jvm/j> Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: OpenFire started successfully (PID 1186448) Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: Log output: tail -f /opt/openfire/logs/nohup.out Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: Web Console: http://192.168.0.142 172.18.0.1 172.23> [root@yfw bin]# journalctl -u openfire.service -f -- Logs begin at Fri 2025-11-14 14:13:59 CST. -- Nov 15 15:28:06 yfw.szrengjing.com stop.sh[1186273]: Stopping OpenFire (PID 1185283)... Nov 15 15:28:06 yfw.szrengjing.com systemd[1]: openfire.service: Main process exited, code=exited, status=143/n/a Nov 15 15:28:07 yfw.szrengjing.com stop.sh[1186273]: Stopped. Nov 15 15:28:07 yfw.szrengjing.com systemd[1]: openfire.service: Failed with result 'exit-code'. Nov 15 15:28:07 yfw.szrengjing.com systemd[1]: Stopped OpenFire XMPP Server. Nov 15 15:28:48 yfw.szrengjing.com systemd[1]: Started OpenFire XMPP Server. Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: Starting OpenFire server using Java: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: OpenFire started successfully (PID 1186448) Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: Log output: tail -f /opt/openfire/logs/nohup.out Nov 15 15:28:48 yfw.szrengjing.com start.sh[1186447]: Web Console: http://192.168.0.142 172.18.0.1 172.23.0.1 172.17.0.1 172.19.0.1 172.20.0.1:9090 ^C [root@yfw bin]# ls -l /opt/openfire/conf/security.xml ls: cannot access '/opt/openfire/conf/security.xml': No such file or directory [root@yfw bin]# sudo su - openfire -s /bin/bash -c ' > cat > /opt/openfire/conf/security.xml << EOF > <?xml version="1.0" encoding="UTF-8"?> > <!-- > security.xml - 默认安全配置文件 > 用于 OpenFire 首次启动时加载管理员控制台和 SASL 设置 > --> > <jive> > <adminConsole> > <!-- Web 管理控制台端口 --> > <port>9090</port> > <!-- HTTPS 安全端口(可选) --> > <securePort>9091</securePort> > <!-- 是否启用安全连接 --> > <secure>false</secure> > </adminConsole> > <sasl> > <!-- 启用 SASL 认证机制 --> > <active>true</active> > </sasl> > </jive> > EOF > ' ✅ Environment loaded for openfire PATH = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/lib/jvm/java-11-openjdk/bin:/opt/maven/bin:/usr/local/ffmpeg/bin:/opt/spark/bin JAVA_HOME = /usr/lib/jvm/java-11-openjdk [root@yfw bin]# chown -R openfire:openfire /opt/openfire/conf [root@yfw bin]# chmod 644 /opt/openfire/conf/security.xml [root@yfw bin]# ls -l /opt/openfire/conf/security.xml -rw-r--r-- 1 openfire openfire 544 Nov 15 15:33 /opt/openfire/conf/security.xml [root@yfw bin]# sudo systemctl restart openfire [root@yfw bin]# journalctl -u openfire.service -f --since "30 seconds ago" -- Logs begin at Fri 2025-11-14 14:13:59 CST. -- Nov 15 15:34:33 yfw.szrengjing.com systemd[1]: Stopping OpenFire XMPP Server... Nov 15 15:34:33 yfw.szrengjing.com stop.sh[1187749]: Stopping OpenFire (PID 1186448)... Nov 15 15:34:33 yfw.szrengjing.com systemd[1]: openfire.service: Main process exited, code=exited, status=143/n/a Nov 15 15:34:34 yfw.szrengjing.com stop.sh[1187749]: Stopped. Nov 15 15:34:34 yfw.szrengjing.com systemd[1]: openfire.service: Failed with result 'exit-code'. Nov 15 15:34:34 yfw.szrengjing.com systemd[1]: Stopped OpenFire XMPP Server. Nov 15 15:34:34 yfw.szrengjing.com systemd[1]: Started OpenFire XMPP Server. Nov 15 15:34:34 yfw.szrengjing.com start.sh[1187757]: Starting OpenFire server using Java: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java Nov 15 15:34:34 yfw.szrengjing.com start.sh[1187757]: OpenFire started successfully (PID 1187759) Nov 15 15:34:34 yfw.szrengjing.com start.sh[1187757]: Log output: tail -f /opt/openfire/logs/nohup.out Nov 15 15:34:34 yfw.szrengjing.com start.sh[1187757]: Web Console: http://192.168.0.142 172.18.0.1 172.23.0.1 172.17.0.1 172.19.0.1 172.20.0.1:9090 ^C [root@yfw bin]# sudo su - openfire -s /bin/bash -c ' > cat > /opt/openfire/conf/openfire.xml << EOF > <?xml version="1.0" encoding="UTF-8"?> > <jive> > <adminConsole> > <!-- 必须显式设置加密算法,防止 NullPointer --> > <encryption>none</encryption> > <port>9090</port> > <securePort>9091</securePort> > <secure>false</secure> > </adminConsole> > > <!-- 默认语言环境 --> > <locale>zh_CN</locale> > > <!-- 内嵌数据库(Derby)用于测试 --> > <database> > <defaultProvider> > <driver>org.apache.derby.jdbc.EmbeddedDriver</driver> > <serverURL>jdbc:derby:/opt/openfire/embedded-db;create=true</serverURL> > </defaultProvider> > </database> > </jive> > EOF > ' ✅ Environment loaded for openfire PATH = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/lib/jvm/java-11-openjdk/bin:/opt/maven/bin:/usr/local/ffmpeg/bin:/opt/spark/bin JAVA_HOME = /usr/lib/jvm/java-11-openjdk [root@yfw bin]# chown -R openfire:openfire /opt/openfire/conf [root@yfw bin]# chmod 644 /opt/openfire/conf/openfire.xml [root@yfw bin]# sudo systemctl restart openfire [root@yfw bin]# journalctl -u openfire.service -f --since "30 seconds ago" -- Logs begin at Fri 2025-11-14 14:13:59 CST. -- Nov 15 15:37:42 yfw.szrengjing.com systemd[1]: Stopping OpenFire XMPP Server... Nov 15 15:37:42 yfw.szrengjing.com stop.sh[1188689]: Stopping OpenFire (PID 1187759)... Nov 15 15:37:42 yfw.szrengjing.com systemd[1]: openfire.service: Main process exited, code=exited, status=143/n/a Nov 15 15:37:43 yfw.szrengjing.com stop.sh[1188689]: Stopped. Nov 15 15:37:43 yfw.szrengjing.com systemd[1]: openfire.service: Failed with result 'exit-code'. Nov 15 15:37:43 yfw.szrengjing.com systemd[1]: Stopped OpenFire XMPP Server. Nov 15 15:37:43 yfw.szrengjing.com systemd[1]: Started OpenFire XMPP Server. Nov 15 15:37:43 yfw.szrengjing.com start.sh[1188697]: Starting OpenFire server using Java: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java Nov 15 15:37:43 yfw.szrengjing.com start.sh[1188697]: OpenFire started successfully (PID 1188698) Nov 15 15:37:43 yfw.szrengjing.com start.sh[1188697]: Log output: tail -f /opt/openfire/logs/nohup.out Nov 15 15:37:43 yfw.szrengjing.com start.sh[1188697]: Web Console: http://192.168.0.142 172.18.0.1 172.23.0.1 172.17.0.1 172.19.0.1 172.20.0.1:9090 ^C [root@yfw bin]# tail -f /opt/openfire/logs/nohup.out Openfire 5.0.2 [2025年11月15日 下午3:37:44] 管理控制台正在侦听 http://ecs-124-71-230-244.compute.hwclouds-dns.com:9090 ^C [root@yfw bin]# sudo su - openfire -s /bin/bash -c ' > cat > /opt/openfire/conf/openfire.xml << EOF > <?xml version="1.0" encoding="UTF-8"?> > <!-- > OpenFire 配置文件 - 必须符合规范格式 > --> > <jive> > <adminConsole> > <!-- 显式声明加密方式,防止 NullPointer --> > <encryption>none</encryption> > <port>9090</port> > <securePort>9091</securePort> > <secure>false</secure> > </adminConsole> > > <!-- 设置语言环境 --> > <locale>en_US</locale> > > <!-- 使用嵌入式 Derby 数据库 --> > <database> > <defaultProvider> > <driver>org.apache.derby.jdbc.EmbeddedDriver</driver> > <serverURL>jdbc:derby:/opt/openfire/embedded-db;create=true</serverURL> > <username></username> > <password></password> > </defaultProvider> > </database> > > <!-- 强制初始化加密算法属性 --> > <setup>true</setup> > </jive> > EOF > ' ✅ Environment loaded for openfire PATH = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/lib/jvm/java-11-openjdk/bin:/opt/maven/bin:/usr/local/ffmpeg/bin:/opt/spark/bin JAVA_HOME = /usr/lib/jvm/java-11-openjdk [root@yfw bin]# # 创建数据库目录 [root@yfw bin]# sudo mkdir -p /opt/openfire/embedded-db [root@yfw bin]# [root@yfw bin]# # 确保 openfire 用户可写 [root@yfw bin]# sudo chown -R openfire:openfire /opt/openfire/conf /opt/openfire/embedded-db /opt/openfire/logs [root@yfw bin]# sudo chmod -R 755 /opt/openfire/conf [root@yfw bin]# sudo chmod 644 /opt/openfire/conf/*.xml [root@yfw bin]# # 清理旧状态 [root@yfw bin]# sudo systemctl stop openfire [root@yfw bin]# sleep 3 [root@yfw bin]# rm -f /opt/openfire/logs/openfire.pid [root@yfw bin]# > /opt/openfire/logs/nohup.out [root@yfw bin]# [root@yfw bin]# # 重新启动 [root@yfw bin]# sudo systemctl start openfire [root@yfw bin]# tail -f /opt/openfire/logs/nohup.out at java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128) [?:?] at jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347) [?:?] at java.lang.Class.newInstance(Class.java:645) [?:?] at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:92) [startup.jar:5.0.2] at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:56) [startup.jar:5.0.2] Caused by: java.sql.SQLException: ConnectionManager.getConnection() failed to obtain a connection after 11 attempts. The exception from the last attempt is as follows: java.sql.SQLException: Check JDBC properties; data source was not be initialised at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager.java:204) ~[xmppserver-5.0.2.jar:5.0.2] at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:1010) ~[xmppserver-5.0.2.jar:5.0.2] ... 11 more 启动服务器时出错。有关详细信息,请查看日志文件。
最新发布
11-16
[root@yfw ~]# cd /opt/openfire/enterprise/spark/Spark [root@yfw Spark]# # 1. 创建提取目录 [root@yfw Spark]# cd /tmp [root@yfw tmp]# mkdir -p xvfb-extract && cd xvfb-extract [root@yfw xvfb-extract]# rm -rf * [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 2. 解压 RPM 内容到当前目录 [root@yfw xvfb-extract]# rpm2cpio ../xorg-x11-server-Xvfb-1.20.11-2.el8.x86_64.rpm | cpio -idmv ./usr/bin/Xvfb ./usr/bin/xvfb-run ./usr/lib/.build-id ./usr/lib/.build-id/90 ./usr/lib/.build-id/90/ef040f79a6dc2a63bd97c6f8615551a9918520 ./usr/share/man/man1/Xvfb.1.gz 4104 blocks [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 3. 查看是否成功提取出 Xvfb [root@yfw xvfb-extract]# ls -l usr/bin/Xvfb -rwxr-xr-x 1 root root 2091144 Jun 11 2021 usr/bin/Xvfb [root@yfw xvfb-extract]# # 输出应类似: [root@yfw xvfb-extract]# # -rwxr-xr-x 1 root root 298808 Jan 1 2021 usr/bin/Xvfb [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 4. 复制到 openfire 用户 bin 目录 [root@yfw xvfb-extract]# su - openfire -c 'mkdir -p ~/bin' This account is currently not available. [root@yfw xvfb-extract]# cp usr/bin/Xvfb /home/openfire/bin/ cp: cannot create regular file '/home/openfire/bin/': Not a directory [root@yfw xvfb-extract]# chown openfire:openfire /home/openfire/bin/Xvfb chown: cannot access '/home/openfire/bin/Xvfb': No such file or directory [root@yfw xvfb-extract]# chmod +x /home/openfire/bin/Xvfb chmod: cannot access '/home/openfire/bin/Xvfb': No such file or directory [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 5. 验证可执行性 [root@yfw xvfb-extract]# su - openfire -s /bin/bash -c 'which Xvfb; Xvfb -help | head -5' /usr/bin/which: no Xvfb in (/usr/local/ffmpeg/bin:/opt/spark/bin:=en_US.UTF-8:/usr/local/ffmpeg/bin) -bash: head: command not found -bash: Xvfb: command not found [root@yfw xvfb-extract]# grep openfire /etc/passwd openfire:x:990:985:Openfire Jabber Server:/opt/openfire:/sbin/nologin [root@yfw xvfb-extract]# # 删除之前错误创建的内容(可选) [root@yfw xvfb-extract]# rm -rf /home/openfire/bin [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 在真正的 home 目录下创建 bin [root@yfw xvfb-extract]# mkdir -p /opt/openfire/bin [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 复制 Xvfb 到正确位置 [root@yfw xvfb-extract]# cp /tmp/xvfb-extract/usr/bin/Xvfb /opt/openfire/bin/ [root@yfw xvfb-extract]# cp /tmp/xvfb-extract/usr/bin/xvfb-run /opt/openfire/bin/ # 可选 [root@yfw xvfb-extract]# chown -R openfire:openfire /opt/openfire/bin [root@yfw xvfb-extract]# chmod +x /opt/openfire/bin/Xvfb [root@yfw xvfb-extract]# [ -f /opt/openfire/bin/xvfb-run ] && chmod +x /opt/openfire/bin/xvfb-run [root@yfw xvfb-extract]# su -s /bin/bash openfire -c ' > export PATH=/opt/openfire/bin:$PATH > export DISPLAY=:99 > > # 检查是否能找到 Xvfb > which Xvfb > Xvfb -help | head -5 > ' ~/bin/Xvfb use: X [:<display>] [option] -a # default pointer acceleration (factor) -ac disable access control restrictions -audit int set audit trail level -auth file select authorization file -br create root window with black background +bs enable any backing store support -bs disable any backing store support -c turns off key-click c # key-click volume (0-100) -cc int default color visual class -nocursor disable the cursor -core generate core dump on fatal error -displayfd fd file descriptor to write display number to when ready to connect -dpi int screen resolution in dots per inch -dpms disables VESA DPMS monitor control -deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs -f # bell base (0-100) -fc string cursor font -fn string default font name -fp string default font path -help prints message with these options +iglx Allow creating indirect GLX contexts -iglx Prohibit creating indirect GLX contexts (default) -I ignore all remaining arguments -ld int limit data space to N Kb -lf int limit number of open files to N -ls int limit stack space to N Kb -nolock disable the locking mechanism -maxclients n set maximum number of clients (power of two) -nolisten string don't listen on protocol -listen string listen on protocol -noreset don't reset after last client exists -background [none] create root window with no background -reset reset after last client exists -p # screen-saver pattern duration (minutes) -pn accept failure to listen on all ports -nopn reject failure to listen on all ports -r turns off auto-repeat r turns on auto-repeat -render [default|mono|gray|color] set render color alloc policy -retro start with classic stipple and cursor -s # screen-saver timeout (minutes) -seat string seat to run on -t # default pointer threshold (pixels/t) -terminate terminate at server reset -to # connection time out -tst disable testing extensions ttyxx server started from init on /dev/ttyxx v video blanking for screen-saver -v screen-saver without video blanking -wm WhenMapped default backing-store -wr create root window with white background -maxbigreqsize set maximal bigrequest size +xinerama Enable XINERAMA extension -xinerama Disable XINERAMA extension -dumbSched Disable smart scheduling and threaded input, enable old behavior -schedInterval int Set scheduler interval in msec -sigstop Enable SIGSTOP based startup +extension name Enable extension -extension name Disable extension -query host-name contact named host for XDMCP -broadcast broadcast for XDMCP -multicast [addr [hops]] IPv6 multicast for XDMCP -indirect host-name contact named host for indirect XDMCP -port port-num UDP port number to send messages to -from local-address specify the local address to connect from -once Terminate server after one session -class display-class specify display class to send in manage -cookie xdm-auth-bits specify the magic cookie for XDMCP -displayID display-id manufacturer display ID for request [+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask] ] ] ] enable/disable accessx key sequences -ardelay set XKB autorepeat delay -arinterval set XKB autorepeat interval -screen scrn WxHxD set screen's width, height, depth -pixdepths list-of-int support given pixmap depths +/-render turn on/off RENDER extension support(default on) -linebias n adjust thin line pixelization -blackpixel n pixel value for black -whitepixel n pixel value for white -fbdir directory put framebuffers in mmap'ed files in directory -shmem put framebuffers in shared memory [root@yfw xvfb-extract]# su -s /bin/bash openfire -c ' > export PATH=/opt/openfire/bin:$PATH > export DISPLAY=:99 > > # 启动 Xvfb(如果尚未运行) > if ! pgrep -f "Xvfb :99" > /dev/null; then > echo "🚀 Starting Xvfb on DISPLAY=:99" > Xvfb :99 -screen 0 1024x768x24 -nolisten tcp & > sleep 3 > fi > > # 进入 Spark 目录并启动客户端 > cd /opt/openfire/enterprise/spark/Spark || { echo "❌ Error: Spark directory not found!"; exit 1; } > echo "🎮 Launching Spark client..." > exec ./Spark & > ' 🎮 Launching Spark client... [root@yfw xvfb-extract]# java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jivesoftware.launcher.Startup.start(Startup.java:75) at org.jivesoftware.launcher.Startup.main(Startup.java:31) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84) at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:69) at install4j.org.jivesoftware.launcher.Startup.main(Unknown Source) Caused by: java.awt.AWTError: Can't connect to X11 window server using ':99' as the value of the DISPLAY variable. at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65) at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:115) at java.security.AccessController.doPrivileged(Native Method) at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82) at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:131) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at java.awt.Toolkit$2.run(Toolkit.java:860) at java.awt.Toolkit$2.run(Toolkit.java:855) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854) at sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:2032) at javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:1158) at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:431) at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:148) at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1577) at javax.swing.UIManager.setLookAndFeel(UIManager.java:539) at javax.swing.UIManager.setLookAndFeel(UIManager.java:579) at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1349) at javax.swing.UIManager.initialize(UIManager.java:1459) at javax.swing.UIManager.maybeInitialize(UIManager.java:1426) at javax.swing.UIManager.getInstalledLookAndFeels(UIManager.java:419) at javax.swing.UIManager.installLookAndFeel(UIManager.java:462) at javax.swing.UIManager.installLookAndFeel(UIManager.java:481) at org.jivesoftware.spark.ui.themes.LookAndFeelManager.<clinit>(LookAndFeelManager.java:40) at org.jivesoftware.Spark.startup(Spark.java:163) ... 13 more [root@yfw xvfb-extract]# # 查看 Xvfb 是否在运行 [root@yfw xvfb-extract]# pgrep -f Xvfb [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 查看 Spark Java 进程 [root@yfw xvfb-extract]# pgrep -f Spark | xargs ps -fp error: list of process IDs must follow -p Usage: ps [options] Try 'ps --help <simple|list|output|threads|misc|all>' or 'ps --help <s|l|o|t|m|a>' for additional help text. For more details see ps(1). [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 或查看是否有 Java 进程属于 openfire [root@yfw xvfb-extract]# ps aux | grep java | grep openfire openfire 1328 0.2 8.5 3934888 327252 ? Sl Oct16 41:50 /usr/lib/jvm/java-11/bin/java -server -Djdk.tls.ephemeralDHKeySize=matched -Djsse.SSLEngine.acceptLargeFragments=true -Dlog4j.configurationFile=/opt/openfire/bin/../lib/log4j2.xml -Dlog4j2.formatMsgNoLookups=true -Dlog4j.skipJansi=false -DopenfireHome=/opt/openfire/bin/../ -Dopenfire.lib.dir=/opt/openfire/lib -classpath /opt/openfire/.install4j/i4jruntime.jar:/opt/openfire/.install4j/launchere44106de.jar:/opt/openfire/lib/* install4j.org.jivesoftware.openfire.starter.ServerStarter start openfire 4101 0.1 5.0 3746016 192120 ? Sl Oct16 28:12 /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dconfig.file=/opt/openfire/bin/../plugins/pade/classes/jvb/application.conf -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/opt/openfire/bin/../plugins/pade/classes/jvb -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=config -Djava.util.logging.config.file=./logging.properties -Djdk.tls.ephemeralDHKeySize=2048 -cp ./jitsi-videobridge-2.1-SNAPSHOT.jar:./jitsi-videobridge-2.1-SNAPSHOT-jar-with-dependencies.jar org.jitsi.videobridge.MainKt --apis=rest openfire 4124 0.0 2.8 3737208 107320 ? Sl Oct16 14:17 /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dconfig.file=/opt/openfire/bin/../plugins/pade/classes/jicofo/application.conf -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/opt/openfire/bin/../plugins/pade/classes/jicofo -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=config -Djava.util.logging.config.file=./logging.properties -Djdk.tls.ephemeralDHKeySize=2048 -cp ./jicofo-1.1-SNAPSHOT.jar:./jicofo-1.1-SNAPSHOT-jar-with-dependencies.jar org.jitsi.jicofo.Main --host=localhost --port=5275 --domain=localhost --secret=ElaQPVPKh05Zy4pb3Rgrvmm5XFoXVadRneWHyRqr --user_domain=localhost --user_name=focus --user_password=yra84zlHMIbfpL8CQpJDYDz5ODmtQXPpoRVds1WN [root@yfw xvfb-extract]# su -s /bin/bash openfire -c ' > export PATH=/opt/openfire/bin:$PATH > export DISPLAY=:99 > > # 检查是否已有 Xvfb 运行,避免重复启动 > if ! pgrep -f "Xvfb :99" > /dev/null; then > echo "🚀 Starting Xvfb on DISPLAY=:99" > Xvfb :99 -screen 0 1024x768x24 -nolisten tcp & > sleep 3 > fi > > # 检查 Xvfb 是否真的起来了 > if ! ps aux | grep Xvfb | grep -q :99; then > echo "❌ Failed to start Xvfb!" > exit 1 > fi > > # 进入 Spark 目录并启动客户端 > cd /opt/openfire/enterprise/spark/Spark || { echo "❌ Spark directory not found!"; exit 1; } > > echo "🎮 Launching Spark client..." > exec ./Spark & > ' 🎮 Launching Spark client... [root@yfw xvfb-extract]# java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jivesoftware.launcher.Startup.start(Startup.java:75) at org.jivesoftware.launcher.Startup.main(Startup.java:31) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84) at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:69) at install4j.org.jivesoftware.launcher.Startup.main(Unknown Source) Caused by: java.awt.AWTError: Can't connect to X11 window server using ':99' as the value of the DISPLAY variable. at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65) at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:115) at java.security.AccessController.doPrivileged(Native Method) at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82) at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:131) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at java.awt.Toolkit$2.run(Toolkit.java:860) at java.awt.Toolkit$2.run(Toolkit.java:855) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854) at sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:2032) at javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:1158) at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:431) at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:148) at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1577) at javax.swing.UIManager.setLookAndFeel(UIManager.java:539) at javax.swing.UIManager.setLookAndFeel(UIManager.java:579) at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1349) at javax.swing.UIManager.initialize(UIManager.java:1459) at javax.swing.UIManager.maybeInitialize(UIManager.java:1426) at javax.swing.UIManager.getInstalledLookAndFeels(UIManager.java:419) at javax.swing.UIManager.installLookAndFeel(UIManager.java:462) at javax.swing.UIManager.installLookAndFeel(UIManager.java:481) at org.jivesoftware.spark.ui.themes.LookAndFeelManager.<clinit>(LookAndFeelManager.java:40) at org.jivesoftware.Spark.startup(Spark.java:163) ... 13 more [root@yfw xvfb-extract]# # 查看是否有新的 Java 进程(属于 Spark) [root@yfw xvfb-extract]# ps aux | grep java | grep openfire openfire 1328 0.2 8.5 3934888 327272 ? Sl Oct16 41:51 /usr/lib/jvm/java-11/bin/java -server -Djdk.tls.ephemeralDHKeySize=matched -Djsse.SSLEngine.acceptLargeFragments=true -Dlog4j.configurationFile=/opt/openfire/bin/../lib/log4j2.xml -Dlog4j2.formatMsgNoLookups=true -Dlog4j.skipJansi=false -DopenfireHome=/opt/openfire/bin/../ -Dopenfire.lib.dir=/opt/openfire/lib -classpath /opt/openfire/.install4j/i4jruntime.jar:/opt/openfire/.install4j/launchere44106de.jar:/opt/openfire/lib/* install4j.org.jivesoftware.openfire.starter.ServerStarter start openfire 4101 0.1 5.0 3746016 194592 ? Sl Oct16 28:13 /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dconfig.file=/opt/openfire/bin/../plugins/pade/classes/jvb/application.conf -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/opt/openfire/bin/../plugins/pade/classes/jvb -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=config -Djava.util.logging.config.file=./logging.properties -Djdk.tls.ephemeralDHKeySize=2048 -cp ./jitsi-videobridge-2.1-SNAPSHOT.jar:./jitsi-videobridge-2.1-SNAPSHOT-jar-with-dependencies.jar org.jitsi.videobridge.MainKt --apis=rest openfire 4124 0.0 2.8 3737208 107320 ? Sl Oct16 14:17 /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dconfig.file=/opt/openfire/bin/../plugins/pade/classes/jicofo/application.conf -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/opt/openfire/bin/../plugins/pade/classes/jicofo -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=config -Djava.util.logging.config.file=./logging.properties -Djdk.tls.ephemeralDHKeySize=2048 -cp ./jicofo-1.1-SNAPSHOT.jar:./jicofo-1.1-SNAPSHOT-jar-with-dependencies.jar org.jitsi.jicofo.Main --host=localhost --port=5275 --domain=localhost --secret=ElaQPVPKh05Zy4pb3Rgrvmm5XFoXVadRneWHyRqr --user_domain=localhost --user_name=focus --user_password=yra84zlHMIbfpL8CQpJDYDz5ODmtQXPpoRVds1WN [root@yfw xvfb-extract]# # 查看是否有 Xvfb 进程 [root@yfw xvfb-extract]# pgrep -f "Xvfb :99" [root@yfw xvfb-extract]# su -s /bin/bash openfire -c ' > export PATH=/opt/openfire/bin:$PATH > export DISPLAY=:99 > > echo "🔧 Testing Xvfb on :99..." > > # 先杀掉旧的(如果有) > pkill -f "Xvfb :99" > > # 启动 Xvfb,并前台运行以便看错误 > Xvfb :99 -screen 0 1024x768x24 -nolisten tcp > ' 🔧 Testing Xvfb on :99... pkill: killing pid 265229 failed: Operation not permitted Terminated [root@yfw xvfb-extract]# ps aux | grep Xvfb root 265542 0.0 0.0 9208 1100 pts/0 S+ 08:46 0:00 grep --color=auto Xvfb [root@yfw xvfb-extract]# su -s /bin/bash openfire << 'EOF' > export DISPLAY=:99 > export PATH=/opt/openfire/bin:$PATH > > # 清理可能的旧锁文件(虽然现在没有,但保险起见) > rm -f /tmp/.X99-lock /tmp/.X11-unix/X99 2>/dev/null > > # 启动 Xvfb 虚拟显示器 > echo "🚀 Starting Xvfb on :99..." > Xvfb :99 -screen 0 1024x768x24 -nolisten tcp -novtswitch -nocursor & > > # 等待几秒让服务初始化 > sleep 3 > > # 验证是否成功启动 > if pgrep -f "Xvfb :99" > /dev/null; then > echo "✅ Xvfb is running" > else > echo "❌ Failed to start Xvfb!" > exit 1 > fi > > # 测试 DISPLAY 是否可用(需要 xorg-x11-utils 包) > if command -v xdpyinfo >/dev/null; then > if xdpyinfo -display :99 >/dev/null 2>&1; then > echo "🟢 xdpyinfo OK: DISPLAY :99 is accessible" > else > echo "🔴 xdpyinfo FAILED: Cannot connect to DISPLAY :99" > echo "💡 Check Xvfb logs or missing fonts" > fi > else > echo "🟡 Tip: Install xorg-x11-utils for better debugging:" > echo " yum install -y xorg-x11-utils" > fi > > # 进入 Spark 目录并启动 > cd /opt/openfire/enterprise/spark/Spark || { echo "❌ Spark directory not found!"; exit 1; } > > echo "🎮 Launching Spark client..." > exec ./Spark & > EOF 🚀 Starting Xvfb on :99... Unrecognized option: -novtswitch use: X [:<display>] [option] -a # default pointer acceleration (factor) -ac disable access control restrictions -audit int set audit trail level -auth file select authorization file -br create root window with black background +bs enable any backing store support -bs disable any backing store support -c turns off key-click c # key-click volume (0-100) -cc int default color visual class -nocursor disable the cursor -core generate core dump on fatal error -displayfd fd file descriptor to write display number to when ready to connect -dpi int screen resolution in dots per inch -dpms disables VESA DPMS monitor control -deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs -f # bell base (0-100) -fc string cursor font -fn string default font name -fp string default font path -help prints message with these options +iglx Allow creating indirect GLX contexts -iglx Prohibit creating indirect GLX contexts (default) -I ignore all remaining arguments -ld int limit data space to N Kb -lf int limit number of open files to N -ls int limit stack space to N Kb -nolock disable the locking mechanism -maxclients n set maximum number of clients (power of two) -nolisten string don't listen on protocol -listen string listen on protocol -noreset don't reset after last client exists -background [none] create root window with no background -reset reset after last client exists -p # screen-saver pattern duration (minutes) -pn accept failure to listen on all ports -nopn reject failure to listen on all ports -r turns off auto-repeat r turns on auto-repeat -render [default|mono|gray|color] set render color alloc policy -retro start with classic stipple and cursor -s # screen-saver timeout (minutes) -seat string seat to run on -t # default pointer threshold (pixels/t) -terminate terminate at server reset -to # connection time out -tst disable testing extensions ttyxx server started from init on /dev/ttyxx v video blanking for screen-saver -v screen-saver without video blanking -wm WhenMapped default backing-store -wr create root window with white background -maxbigreqsize set maximal bigrequest size +xinerama Enable XINERAMA extension -xinerama Disable XINERAMA extension -dumbSched Disable smart scheduling and threaded input, enable old behavior -schedInterval int Set scheduler interval in msec -sigstop Enable SIGSTOP based startup +extension name Enable extension -extension name Disable extension -query host-name contact named host for XDMCP -broadcast broadcast for XDMCP -multicast [addr [hops]] IPv6 multicast for XDMCP -indirect host-name contact named host for indirect XDMCP -port port-num UDP port number to send messages to -from local-address specify the local address to connect from -once Terminate server after one session -class display-class specify display class to send in manage -cookie xdm-auth-bits specify the magic cookie for XDMCP -displayID display-id manufacturer display ID for request [+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask] ] ] ] enable/disable accessx key sequences -ardelay set XKB autorepeat delay -arinterval set XKB autorepeat interval -screen scrn WxHxD set screen's width, height, depth -pixdepths list-of-int support given pixmap depths +/-render turn on/off RENDER extension support(default on) -linebias n adjust thin line pixelization -blackpixel n pixel value for black -whitepixel n pixel value for white -fbdir directory put framebuffers in mmap'ed files in directory -shmem put framebuffers in shared memory (EE) Fatal server error: (EE) Unrecognized option: -novtswitch (EE) ❌ Failed to start Xvfb! [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# ps aux | grep java | grep openfire openfire 1328 0.2 8.5 3934888 325616 ? Sl Oct16 41:51 /usr/lib/jvm/java-11/bin/java -server -Djdk.tls.ephemeralDHKeySize=matched -Djsse.SSLEngine.acceptLargeFragments=true -Dlog4j.configurationFile=/opt/openfire/bin/../lib/log4j2.xml -Dlog4j2.formatMsgNoLookups=true -Dlog4j.skipJansi=false -DopenfireHome=/opt/openfire/bin/../ -Dopenfire.lib.dir=/opt/openfire/lib -classpath /opt/openfire/.install4j/i4jruntime.jar:/opt/openfire/.install4j/launchere44106de.jar:/opt/openfire/lib/* install4j.org.jivesoftware.openfire.starter.ServerStarter start openfire 4101 0.1 5.0 3746016 193364 ? Sl Oct16 28:13 /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dconfig.file=/opt/openfire/bin/../plugins/pade/classes/jvb/application.conf -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/opt/openfire/bin/../plugins/pade/classes/jvb -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=config -Djava.util.logging.config.file=./logging.properties -Djdk.tls.ephemeralDHKeySize=2048 -cp ./jitsi-videobridge-2.1-SNAPSHOT.jar:./jitsi-videobridge-2.1-SNAPSHOT-jar-with-dependencies.jar org.jitsi.videobridge.MainKt --apis=rest openfire 4124 0.0 2.8 3737208 107344 ? Sl Oct16 14:17 /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dconfig.file=/opt/openfire/bin/../plugins/pade/classes/jicofo/application.conf -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/opt/openfire/bin/../plugins/pade/classes/jicofo -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=config -Djava.util.logging.config.file=./logging.properties -Djdk.tls.ephemeralDHKeySize=2048 -cp ./jicofo-1.1-SNAPSHOT.jar:./jicofo-1.1-SNAPSHOT-jar-with-dependencies.jar org.jitsi.jicofo.Main --host=localhost --port=5275 --domain=localhost --secret=ElaQPVPKh05Zy4pb3Rgrvmm5XFoXVadRneWHyRqr --user_domain=localhost --user_name=focus --user_password=yra84zlHMIbfpL8CQpJDYDz5ODmtQXPpoRVds1WN [root@yfw xvfb-extract]# su -s /bin/bash openfire -c '/opt/openfire/bin/Xvfb -help' use: X [:<display>] [option] -a # default pointer acceleration (factor) -ac disable access control restrictions -audit int set audit trail level -auth file select authorization file -br create root window with black background +bs enable any backing store support -bs disable any backing store support -c turns off key-click c # key-click volume (0-100) -cc int default color visual class -nocursor disable the cursor -core generate core dump on fatal error -displayfd fd file descriptor to write display number to when ready to connect -dpi int screen resolution in dots per inch -dpms disables VESA DPMS monitor control -deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs -f # bell base (0-100) -fc string cursor font -fn string default font name -fp string default font path -help prints message with these options +iglx Allow creating indirect GLX contexts -iglx Prohibit creating indirect GLX contexts (default) -I ignore all remaining arguments -ld int limit data space to N Kb -lf int limit number of open files to N -ls int limit stack space to N Kb -nolock disable the locking mechanism -maxclients n set maximum number of clients (power of two) -nolisten string don't listen on protocol -listen string listen on protocol -noreset don't reset after last client exists -background [none] create root window with no background -reset reset after last client exists -p # screen-saver pattern duration (minutes) -pn accept failure to listen on all ports -nopn reject failure to listen on all ports -r turns off auto-repeat r turns on auto-repeat -render [default|mono|gray|color] set render color alloc policy -retro start with classic stipple and cursor -s # screen-saver timeout (minutes) -seat string seat to run on -t # default pointer threshold (pixels/t) -terminate terminate at server reset -to # connection time out -tst disable testing extensions ttyxx server started from init on /dev/ttyxx v video blanking for screen-saver -v screen-saver without video blanking -wm WhenMapped default backing-store -wr create root window with white background -maxbigreqsize set maximal bigrequest size +xinerama Enable XINERAMA extension -xinerama Disable XINERAMA extension -dumbSched Disable smart scheduling and threaded input, enable old behavior -schedInterval int Set scheduler interval in msec -sigstop Enable SIGSTOP based startup +extension name Enable extension -extension name Disable extension -query host-name contact named host for XDMCP -broadcast broadcast for XDMCP -multicast [addr [hops]] IPv6 multicast for XDMCP -indirect host-name contact named host for indirect XDMCP -port port-num UDP port number to send messages to -from local-address specify the local address to connect from -once Terminate server after one session -class display-class specify display class to send in manage -cookie xdm-auth-bits specify the magic cookie for XDMCP -displayID display-id manufacturer display ID for request [+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask] ] ] ] enable/disable accessx key sequences -ardelay set XKB autorepeat delay -arinterval set XKB autorepeat interval -screen scrn WxHxD set screen's width, height, depth -pixdepths list-of-int support given pixmap depths +/-render turn on/off RENDER extension support(default on) -linebias n adjust thin line pixelization -blackpixel n pixel value for black -whitepixel n pixel value for white -fbdir directory put framebuffers in mmap'ed files in directory -shmem put framebuffers in shared memory [root@yfw xvfb-extract]# # 清理旧状态 [root@yfw xvfb-extract]# rm -f /tmp/.X99-lock /tmp/.X11-unix/X99 [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 切换到 openfire 用户并启动 Xvfb + Spark [root@yfw xvfb-extract]# su -s /bin/bash openfire << 'EOF' > > export DISPLAY=:99 > export PATH=/opt/openfire/bin:$PATH > > # 再次清理锁文件(在用户上下文中) > rm -f /tmp/.X99-lock /tmp/.X11-unix/X99 > > echo "🚀 Starting Xvfb on :99..." > Xvfb :99 -screen 0 1024x768x24 -nolisten tcp -nocursor & > > sleep 3 > > # 检查进程是否存在 > if pgrep -f "Xvfb.*:99" > /dev/null; then > echo "✅ Xvfb is running (PID: $(pgrep -f "Xvfb.*:99"))" > else > echo "❌ Failed to start Xvfb!" > exit 1 > fi > > # 测试 DISPLAY 可达性(需要 xdpyinfo) > if command -v xdpyinfo >/dev/null; then > if xdpyinfo -display :99 >/dev/null 2>&1; then > echo "🟢 xdpyinfo OK: DISPLAY :99 is accessible" > else > echo "🔴 xdpyinfo FAILED: Cannot connect to DISPLAY :99" > echo "💡 Check logs or missing fonts" > fi > else > echo "🟡 Tip: Install xorg-x11-utils for debugging:" > echo " yum install -y xorg-x11-utils" > fi > > # 启动 Spark 客户端 > cd /opt/openfire/enterprise/spark/Spark || { echo "❌ Spark directory not found!"; exit 1; } > > echo "🎮 Launching Spark client..." > exec ./Spark & > EOF 🚀 Starting Xvfb on :99... sh: /usr/bin/xkbcomp: No such file or directory sh: /usr/bin/xkbcomp: No such file or directory XKB: Failed to compile keymap Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config. (EE) Fatal server error: (EE) Failed to activate virtual core keyboard: 2(EE) ❌ Failed to start Xvfb! [root@yfw xvfb-extract]# # 安装工具包 [root@yfw xvfb-extract]# yum install -y xorg-x11-utils Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 1:12:27 ago on Thu Oct 30 07:39:51 2025. Dependencies resolved. ========================================================================================================== Package Architecture Version Repository Size ========================================================================================================== Installing: xorg-x11-utils x86_64 7.5-28.el8 AppStream 136 k Installing dependencies: libXxf86dga x86_64 1.1.5-1.el8 AppStream 26 k libdmx x86_64 1.1.4-3.el8 AppStream 22 k Transaction Summary ========================================================================================================== Install 3 Packages Total download size: 184 k Installed size: 386 k Downloading Packages: (1/3): xorg-x11-utils-7.5-28.el8.x86_64.rpm 3.6 MB/s | 136 kB 00:00 (2/3): libXxf86dga-1.1.5-1.el8.x86_64.rpm 535 kB/s | 26 kB 00:00 (3/3): libdmx-1.1.4-3.el8.x86_64.rpm 231 kB/s | 22 kB 00:00 ---------------------------------------------------------------------------------------------------------- Total 1.9 MB/s | 184 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : libdmx-1.1.4-3.el8.x86_64 1/3 Installing : libXxf86dga-1.1.5-1.el8.x86_64 2/3 Installing : xorg-x11-utils-7.5-28.el8.x86_64 3/3 Error unpacking rpm package xorg-x11-utils-7.5-28.el8.x86_64 Running scriptlet: xorg-x11-utils-7.5-28.el8.x86_64 3/3 error: unpacking of archive failed on file /usr/bin/edid-decode;6902b6c3: cpio: open error: xorg-x11-utils-7.5-28.el8.x86_64: install failed Verifying : libXxf86dga-1.1.5-1.el8.x86_64 1/3 Verifying : libdmx-1.1.4-3.el8.x86_64 2/3 Verifying : xorg-x11-utils-7.5-28.el8.x86_64 3/3 Installed: libXxf86dga-1.1.5-1.el8.x86_64 libdmx-1.1.4-3.el8.x86_64 Failed: xorg-x11-utils-7.5-28.el8.x86_64 Error: Transaction failed [root@yfw xvfb-extract]# [root@yfw xvfb-extract]# # 测试连接 [root@yfw xvfb-extract]# su -s /bin/bash openfire -c 'DISPLAY=:99 xdpyinfo | grep -i dimensions' bash: xdpyinfo: command not found [root@yfw xvfb-extract]# yum install -y xkeyboard-config xorg-x11-xkb-utils Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 1:14:33 ago on Thu Oct 30 07:39:51 2025. Package xkeyboard-config-2.28-1.el8.noarch is already installed. Dependencies resolved. ========================================================================================================== Package Architecture Version Repository Size ========================================================================================================== Installing: xorg-x11-xkb-utils x86_64 7.7-28.el8 AppStream 114 k Transaction Summary ========================================================================================================== Install 1 Package Total download size: 114 k Installed size: 250 k Downloading Packages: xorg-x11-xkb-utils-7.7-28.el8.x86_64.rpm 3.7 MB/s | 114 kB 00:00 ---------------------------------------------------------------------------------------------------------- Total 3.6 MB/s | 114 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : xorg-x11-xkb-utils-7.7-28.el8.x86_64 1/1 Error unpacking rpm package xorg-x11-xkb-utils-7.7-28.el8.x86_64 Verifying : xorg-x11-xkb-utils-7.7-28.el8.x86_64 1/1 Failed: xorg-x11-xkb-utils-7.7-28.el8.x86_64 Error: Transaction failed [root@yfw xvfb-extract]# which xkbcomp /usr/bin/which: no xkbcomp in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin) [root@yfw xvfb-extract]# # 应输出:/usr/bin/xkbcomp [root@yfw xvfb-extract]# yum install -y xorg-x11-xkb-utils Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 1:16:05 ago on Thu Oct 30 07:39:51 2025. Dependencies resolved. ========================================================================================================== Package Architecture Version Repository Size ========================================================================================================== Installing: xorg-x11-xkb-utils x86_64 7.7-28.el8 AppStream 114 k Transaction Summary ========================================================================================================== Install 1 Package Total download size: 114 k Installed size: 250 k Downloading Packages: xorg-x11-xkb-utils-7.7-28.el8.x86_64.rpm 6.9 MB/s | 114 kB 00:00 ---------------------------------------------------------------------------------------------------------- Total 6.5 MB/s | 114 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : xorg-x11-xkb-utils-7.7-28.el8.x86_64 1/1 Error unpacking rpm package xorg-x11-xkb-utils-7.7-28.el8.x86_64 Verifying : xorg-x11-xkb-utils-7.7-28.el8.x86_64 1/1 Failed: xorg-x11-xkb-utils-7.7-28.el8.x86_64 Error: Transaction failed [root@yfw xvfb-extract]# which xkbcomp /usr/bin/which: no xkbcomp in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin) [root@yfw xvfb-extract]#
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值