You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GitHub Actions发布推文时遇X服务器打开失败错误求助

问题:GitHub Actions调用Twitter API发布推文时出现X Server错误

我通过Twitter(X) API发布推文,使用GitHub Actions工作流触发执行。代码从tweets.txt读取推文,通过tweeted_tweets.txt记录已发布内容避免重复,但触发时出现错误:

Run #!/usr/bin/env python3
import-im6.q16: unable to open X server `:0' @ error/import.c/ImportImageCommand/346.
Error: Process completed with exit code 1.

关联工作流代码

name: Post Tweets to Twitter

on:
  push:
    branches:
      - main  # Adjust this to your repository's default branch

jobs:
  tweet:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.8  # Adjust this if needed

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install tweepy

      - name: Read and Post Tweets
        env:
          DISPLAY: ":0"  # Set the DISPLAY environment variable
        run: |
          #!/usr/bin/env python3
          import tweepy

          consumer_key = ""
          consumer_secret = ""
          access_token = ""
          access_token_secret = ""

          auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
          auth.set_access_token(access_token, access_token_secret)

          api = tweepy.API(auth)

          with open("tweets/tweets.txt", "r") as file:
              tweets = file.read().split("\n\n")

          tweeted_tweets = []
          try:
              with open("tweeted_tweets.txt", "r") as tweeted_file:
                  tweeted_tweets = tweeted_file.read().split("\n")
          except FileNotFoundError:
              pass

          new_tweets = [tweet_text for tweet_text in tweets if tweet_text.strip() and tweet_text not in tweeted_tweets]

          if new_tweets:
              for tweet_text in new_tweets:
                  try:
                      # Add the -X option to disable X server
                      tweet = api.update_status(status=tweet_text, x__options=['-X'])
                      tweeted_tweets.append(tweet_text)
                      print("Tweeted:", tweet_text)
                  except tweepy.TweepError as e:
                      print("Error:", e)

              with open("tweeted_tweets.txt", "w") as tweeted_file:
                  tweeted_file.write("\n".join(tweeted_tweets))

      - name: Commit and Push Changes
        run: |
          git config --local user.email "justinmamathew@gmail.com"
          git config --local user.name "mathewjustin"
          git commit -am "Update tweeted tweets"
          git push

错误原因分析

  • 错误提示中的import-im6.q16是ImageMagick的命令,和当前Python脚本无关。问题根源是你在步骤中设置了DISPLAY: ":0"环境变量,但GitHub Actions的Ubuntu runner是无头环境(无图形界面),不存在X Server,导致系统尝试调用图形相关工具时失败。
  • 代码中api.update_status(status=tweet_text, x__options=['-X'])是错误用法,Tweepy的update_status方法没有x__options这个参数,属于无效参数,可能引发额外异常。

解决方法

  1. 移除不必要的DISPLAY环境变量:在Read and Post Tweets步骤中删除env: DISPLAY: ":0"配置,调用Twitter API无需图形界面,无头环境可正常运行。
  2. 修正Tweepy调用参数:将api.update_status(status=tweet_text, x__options=['-X'])改为api.update_status(status=tweet_text),去掉无效的x__options参数。
  3. 安全存储敏感信息:不要将consumer_key、consumer_secret等密钥硬编码在代码中,改用GitHub Secrets传递:
    • Python代码中通过环境变量读取:
      import os
      consumer_key = os.getenv("TWITTER_CONSUMER_KEY")
      consumer_secret = os.getenv("TWITTER_CONSUMER_SECRET")
      access_token = os.getenv("TWITTER_ACCESS_TOKEN")
      access_token_secret = os.getenv("TWITTER_ACCESS_TOKEN_SECRET")
      
    • 在GitHub Actions的Read and Post Tweets步骤中添加env配置:
      env:
        TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
        TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
        TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
        TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
      

内容的提问来源于stack exchange,提问作者Justin Mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:27:07