差分

ナビゲーションに移動 検索に移動

MediaWikiの「構文ハイライトエラー」

2,976 バイト追加, 2019年7月26日 (金) 14:01
Lattepandaは内蔵ディスプレイが実装されています。さくらのレンタルサーバーで最新のMediaWikiを使用していることが前提なんだけど…<br/>それが元となって、HDMIにディスプレイを接続すると、マルチディスプレイ環境となります。<br/>そのため、ログイン画面が表示されず(実は表示されているのだが、内蔵ディスプレイに表示されている)、画面が真っ黒になります。<br/>「SyntaxHighlight」を使用すると、「構文ハイライトエラー」になってしまう…。
今回はこれを修正していきます。
= LightDMの場合 =
LightDMでは、起動時にコマンドを実行することが出来ます。<br/>
これを利用して、「XRandR(xrandr?)」でログイン画面が表示される画面を切り替えます。<br/>
先ずは、以下のコマンドを実行して、XRandRをインストールします。
<syntaxhighlight lang="bash">pacman -S xorg-xrandr</syntaxhighlight>
次に、LightDMの設定を変更します。<br/>nano等のエディタで「/etc/lightdm/lightdm原因は単純でさくらのレンタルサーバーのPythonは現時点で2.conf」を以下の様に修正します。7…SyntaxHighlightはPython3が前提…<br/>【修正前】<syntaxhighlight lang="text">#display-setup-script=</syntaxhighlight>【修正後】<syntaxhighlight lang="text">display-setup-script=xrandr --output DSI-1 --off --output HDMI-2 --primary</syntaxhighlight>当然うまく動かないわけです…。
「DSI-1(内蔵ディスプレイ)」をoffにして、「HDMI-2(外付けディスプレイ)」をプライマリディスプレイに設定しています。<br/>
再起動すれば、ログイン画面が表示されるはずです。
= gdmの場合(未検証) =明確に設定方法が参考サイトに書かれていなかったのですが…<br/>ユーザーのディスプレイ設定をgdmにコピーできるようです。<br/>ログイン後、内蔵ディスプレイを無効にした状態で、以下のコマンドでディスプレイ設定をコピーします。<syntaxhighlight lang="bash">cp ~/.config/monitors.xml /var/lib/gdm/.config/monitors.xml</syntaxhighlight>そこで、ホームディレクトリにPython3を入れて、そちらを参照するようにSyntaxHighlightを書き換えちゃいます。
サスペンドの設定などもこのファイルに保存されるようなので、コピーすることでログイン画面でサスペンドしないようにできるかもです(未検証)。= Python3のインストール =参考サイトに基づいて、Pythonの最新版(Python3)をインストールしていきます。<br/>先ずはホームディレクトリに作業用のディレクトリを作成して移動します。<syntaxhighlight lang="bash">mkdir ~/workcd work</syntaxhighlight>  次に、wgetコマンドでPythonの公式サイトからモジュールをダウンロードします。<syntaxhighlight lang="bash">wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz</syntaxhighlight>(ダウンロードパスは適宜見直してください)  ダウンロードしたらtarコマンドで解凍します。<syntaxhighlight lang="bash">tar -xzf Python-3.7.4.tar.xz</syntaxhighlight>  解凍すると「Python-3.7.4」ディレクトリが作成されますので、そこに移動します。<syntaxhighlight lang="bash">cd Python-3.7.4</syntaxhighlight>  以下のコマンドでインストール先を変更します。<syntaxhighlight lang="bash">./configure --prefix=$HOME/local/python/</syntaxhighlight>  そしたらmakeしてインストールします。<syntaxhighlight lang="bash">makemake install</syntaxhighlight>  インストールに使用したディレクトリは削除しちゃいます。<syntaxhighlight lang="bash">cd ~rm -fr work</syntaxhighlight> = SyntaxHighlightの編集 =コードを直接編集するので、バックアップを取りながら進めていきます。  先ずは編集するコードが有るところまで移動します。<br/>ターゲットは「create_pygmentize_bundle」ファイルです。<syntaxhighlight lang="bash">cd [MdiaWikiのディレクトリ]/extensions/SyntaxHighlight_GeSHi/pygments</syntaxhighlight>[MdiaWikiのディレクトリ]は自分の環境に合わせて書き換えてください。  バックアップを作成します。<syntaxhighlight lang="bash">cp create_pygmentize_bundle create_pygmentize_bundle_bkmv pygmentize pygmentize_bk</syntaxhighlight>(「pygmentize」ファイルは作成し直すので、mvしています)  「create_pygmentize_bundle」ファイルを修正します。<br/>以下の様に修正してください<syntaxhighlight lang="python" line highlight="1,19,60">#!/home/[userid]/local/python/bin/python3# -*- coding: utf-8 -*-""" Create a standalone, executable 'pygmentize' bundle. Author: Ori Livneh """import hashlibimport ioimport osimport statimport textwrapimport urllib.requestimport xmlrpc.clientimport zipfile  PYGMENTIZE_LAUNCHER = textwrap.dedent('''\ #!/home/[userid]/local/python/bin/python3  import sys import pygments.cmdline try: sys.exit(pygments.cmdline.main(sys.argv)) except KeyboardInterrupt: sys.exit(1)''')  print('Querying PyPI for the latest Pygments release...')pypi = xmlrpc.client.ServerProxy('https://pypi.python.org/pypi')latest_version = pypi.package_releases('Pygments')[0]url = Nonefor release in pypi.release_urls('Pygments', latest_version): if (release['packagetype'] == 'bdist_wheel' and release['python_version'].startswith('py2')): url = release['url'] md5_digest = release['md5_digest'] break if not url: raise RuntimeError('No suitable package found.') print('Retrieving version %s (%s)...' % (latest_version, url))req = urllib.request.urlopen(url)buf = io.BytesIO(req.read()) print('Verifying...')if hashlib.md5(buf.getvalue()).hexdigest() != md5_digest: raise RuntimeError('MD5 checksum mismatch.') print('Creating executable ZIP bundle...')with zipfile.ZipFile(buf, 'a') as zf: zf.writestr('__main__.py', PYGMENTIZE_LAUNCHER) data = buf.getvalue()script_dir = os.path.dirname(os.path.abspath(__file__))file_path = os.path.join(script_dir, 'pygmentize')with open(file_path, 'wb') as f: f.write(b'#!/home/[userid]/local/python/bin/python3\n') f.write(data) file_st = os.stat(file_path)os.chmod(file_path, file_st.st_mode | stat.S_IEXEC) with open(os.path.join(script_dir, 'VERSION'), 'w') as f: f.write(latest_version + '\n') print('Done. Wrote %s bytes to %s' % (len(data), file_path))</syntaxhighlight>([userid]は書き直してください)  最後に「pygmentize」を作成し直します。<syntaxhighlight lang="bash">/home/[userid]/local/python/bin/python3 ./create_pygmentize_bundle</syntaxhighlight>([userid]は書き直してください) = WEBブラウザのキャッシュ =WEBブラウザのキャッシュが残っていると、なかなか変わった感じがしないかもしれません。<br/>そんな時は例えば「<syntaxhighlight lang="bash">」を「<syntaxhighlight lang="bash" line>」などに書き直してみてください。<br/>再起動することで、ログイン画面が表示されるはずです。これで、行番号が表示されればOKです。
= 参考サイト =
[https://qiitaemptypage.comjp/ttsnnotes/items/2b30efe2e15df333d7d4 Ubuntu 16.04 プライマリモニタにログイン画面を表示する方法 pymods-on- Qiita]<br/>[https://wiki.archlinux.jp/index.php/LightDM#LightDM_.E3.81.8C.E9.96.93.E9.81.95.E3.81.A3.E3.81.9Fsakura.E3.83.A2.E3.83.8B.E3.82.BF.E3.81.AB.E8.A1.A8.E7.A4.BA.E3.81.95.E3.82.8C.E3.82.8B LightDM - ArchWikihtml さくらのレンタルサーバで Python 外部モジュールを使う]<br/>[https://wikiaffitips.archlinux.jpcom/index.phppages/GDM#65.E3.83.87.E3.83.95.E3.82.A9.E3.83.AB.E3.83.88.E3.81.AE.E3.83.A2.E3.83.8B.E3.82.BF.E3.83.BC.E8.A8.AD.E5.AE.9A GDM html さくらにPython3をインストールしたときのメモ - ArchWikiアフィリエイト&ウェブ制作のtips]<br/>
[[Category:ArchLinuxさくらサーバー]][[Category:LattepandaMediaWiki]][[Category:Python3]][[Category:SyntaxHighlight]]

案内メニュー