私はNvidia Optimusがインストールされているlenovo Thinkpadを持っています。ミニドッキングステーションシリーズ3。
ドッキングすると、可能な場合は外部モニターに自動的に切り替えられ、ドッキングを解除すると自動的にThinkpad LCDに切り替えられます。
暗号化されたディスク(dm-crypt)のパスワードを入力する必要があるため、起動段階でも機能します。
以下を試しましたが、動作しません。
次の行を使用してファイル/etc/acpi/thinkpad-undock.sh
(+)を作成しました。chmod a+x thinkpad-undock.sh
#!/bin/sh
xrandr --output LVDS-1 --auto --output DP-5.8 --off
そして/etc/acpi/thinkpad-dock.sh
#!/bin/sh
prime-select nvidia # ensures that nvidia card is selected
xrandr --output LVDS-1 --off --output DP-5.8 --auto
そして再びchmod a+x thinkpad-dock.sh
。
両方のスクリプトを手動で実行すると機能します。
その後、イベントを処理するために2つのファイルを作成しました。
thinkpad-dock-lenovo
event=ibm/hotkey LEN0068:00 00000080 00004010
action=/etc/acpi/thinkpad-dock.sh
そしてthinkpad-undock-lenovo
event=ibm/hotkey LEN0068:00 00000080 00004011
action=/etc/acpi/thinkpad-undock.sh
それから/etc/init.d/acpid reload
。ただし、ノートブックをドッキングまたはドッキング解除すると、何もしません。
acpi_listen
ラップトップを起動してドッキングしてから切断すると、上記のイベント番号が表示されます。
それでは、どのように機能させることができるのか、どのようなアイデアがありますか?
おそらく問題はいくつかのデスクトップ環境(kdeなど)で解決されるかもしれませんが、xmonadを使用しています。上記のように、ブートフェーズでは、xmonadはデスクトップ環境とは無関係に動作する必要があります。
私はカーネルバージョン4.4.0-22でUbuntu 16.04を実行しています。
また、以下のようにudevルールを追加しようとしましたが、うまくいきません。
ENV{EVENT}=="undock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
ENV{EVENT}=="dock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
dock
ラップトップがドッキングされているかどうかにかかわらず、このファイルの値は常にゼロであることを確認しました。
答え1
スクリプトは DISPLAY 環境変数を設定しません。次のようにする必要があります。
#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
答え2
私は両方を設定DISPLAY
し、XAUTHORITY
小さな睡眠を追加することに幸運です。
export DISPLAY=:0
export XAUTHORITY=/home/user/.Xauthority
sleep 3
xrandr ...
答え3
同様の設定がありますが、ドッカーレスポンシブソリューションを追求したことはありません。これは興味深いことです。
私がしたことは、Gnomeのディスプレイマネージャを使用してLCDディスプレイを「オフ」に設定し、外部ディスプレイをデフォルトディスプレイに設定することでした。これにより、ノートブックをドックに置くたびに外部モニターに切り替わります。持ち上げると液晶画面に戻ります。
コンソールに配置すること(dm-cryptのインストールから開始)も機能しますが、微妙な違いがあります。カバーを閉じるとノートブックをドッキングステーションに置き、電源を入れると外部モニター(BIOS画面などを含む)から自動的に起動します。カバーが開いていると、GDMにログインするまで切り替えは発生しません。
答え4
次のようなものが必要です。
udev(lsusbでidVendorを変更)
ACTION=="add", ATTRS{idVendor}=="05e3", ATTRS{idProduct}=="****", RUN+="/local/run.sh /local/udev-dplink-on.sh"
ACTION=="remove", ATTRS{idVendor}=="05e3", ATTRS{idProduct}=="****", RUN+="/local/run.sh /local/udev-dplink-off.sh"
apt-getは次にインストールされます。
実行sh
#!/bin/bash
echo $1 | at now