「Tp smapi」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の6版が非表示)
10行目: 10行目:
 
Ivy Bridge プロセッサあるいはそれよりも新しいプロセッサ (型番が {{ic|*30}}, {{ic|*40}}, {{ic|*50}} のモデル) が搭載された最新の Thinkpad にインストールしても、tp_smapi は動作しません。{{Pkg|tpacpi-bat}} か {{AUR|tpacpi-bat-git}} を使って下さい。
 
Ivy Bridge プロセッサあるいはそれよりも新しいプロセッサ (型番が {{ic|*30}}, {{ic|*40}}, {{ic|*50}} のモデル) が搭載された最新の Thinkpad にインストールしても、tp_smapi は動作しません。{{Pkg|tpacpi-bat}} か {{AUR|tpacpi-bat-git}} を使って下さい。
   
==インストール==
+
== インストール ==
最近 community リポジトリに移動された {{Pkg|tp_smapi}} パッケージを[[インストール]]してください。カスタムカーネルの [[linux-ck]] を使っている場合は [[AUR]] からインストールできる {{AUR|tp_smapi-ck}} が存在します。
 
   
  +
{{Pkg|linux}} の場合は {{Pkg|tp_smapi}} パッケージ、または {{Pkg|linux-lts}} の場合は {{Pkg|tp_smapi-lts}} を [[インストール]] します。他のすべてのカーネル (例:{{Pkg|linux-zen}}) の場合は、{{AUR|tp_smapi-dkms}} の使用を検討してください。
パッケージによって3つの新しい[[カーネルモジュール]]が追加されます:
 
   
  +
''tp_smapi'' (およびそのバリエーション) は、次の [[カーネルモジュール]] を提供します。
{| class="wikitable" align="center" style="width:100%; text-align:left;"
 
|- style="text-align: center;"
 
| colspan="2" | '''カーネルモジュール'''
 
|- style="text-align: center;"
 
| width="30%" |'''名前'''
 
| |'''説明'''
 
|-
 
|tp_smapi
 
|
 
ThinkPad SMAPI サポート
 
|- style="border-top:1px solid #aaaaaa;"
 
|hdaps
 
|
 
IBM [[Hard Drive Active Protection System]] (HDAPS) ドライバー
 
|- style="border-top:1px solid #aaaaaa;"
 
|thinkpad_ec
 
|
 
ThinkPad の組み込みコントローラハードウェアへのアクセス (tp_smapi と hdaps のどちらも依存)
 
|}
 
   
  +
; tp_smapi: ThinkPad SMAPI サポート
再起動後、tp_smapi とその依存モジュールは自動的にロードされ、{{ic|/sys/devices/platform/smapi}} 下の sysfs インターフェイスが使えるようになります。
 
  +
; hdaps: IBM ハードドライブアクティブ保護システム ([[HDAPS]]) ドライバー
  +
; thinkpad_ec: ThinkPad 組み込みコントローラーのハードウェアアクセス ({{ic|tp_smapi}} と {{ic|hdaps}} は両方ともこれに依存します)
  +
  +
再起動後、{{ic|tp_smapi}} とその依存関係が自動ロードされ、{{ic|/sys/devices/platform/smapi/}} の sysfs インターフェイスが完全に機能するようになります。
   
 
==機能==
 
==機能==
59行目: 44行目:
 
echo ${3:-80} > /sys/devices/platform/smapi/BAT${1:-0}/stop_charge_thresh
 
echo ${3:-80} > /sys/devices/platform/smapi/BAT${1:-0}/stop_charge_thresh
   
上記のスクリプトを使ってバッテリーの値を設定するのはとても簡単で、({{ic|set_bat_thresh}} がスクリプトの名前だとして) 以下のコマンドを入力るだけです:
+
[[ヘルプ:読み方#実行可能属性の付与|実行可能]] にします。このスクリプトを使用すると、バッテリーのしきい値を設定するのが非常に簡単になりま
  +
次のように入力するだけです (set_battery_thresholds がスクリプトの名前の場合):
  +
 
set_battery_thresholds 0 96 100
 
set_battery_thresholds 0 96 100
引数を付けないで実行すると、BAT0 の閾値が 40% と 80% に設定されます。
 
   
  +
または、引数を指定せずに実行すると、デフォルトで BAT0 になり、しきい値が 40% と 80% になります。
スクリプトに実行可能属性を付与してください:
 
  +
# chmod 744 /usr/sbin/set_battery_thresholds
 
  +
起動時に [[systemd]] にスクリプトを実行させます。したがって、{{ic|tp_smapi_set_battery_thresholds.service}} ユニットを作成し、その後 [[起動/有効化]] します。
   
起動時に [[systemd]] でスクリプトを実行します (initscripts の {{ic|rc.local}} を使うのはもう非推奨になりました)。まず {{ic|/etc/systemd/system/tp_smapi_set_battery_thresholds.service}} を作成:
+
{{hc|/etc/systemd/system/tp_smapi_set_battery_thresholds.service|2=
{{bc|<nowiki>
 
 
[Unit]
 
[Unit]
 
Description=Set Battery Charge Thresholds by tp_smapi
 
Description=Set Battery Charge Thresholds by tp_smapi
78行目: 64行目:
 
[Install]
 
[Install]
 
WantedBy=multi-user.target
 
WantedBy=multi-user.target
  +
}}
</nowiki>}}
 
   
  +
バッテリーで動作させることも可能です。これには、[[acpid]] がインストールされ、実行されている必要があります。{{ic|/etc/acpi/handler.sh}} を編集します。
そして systemd で有効化:
 
# systemctl enable tp_smapi_set_battery_thresholds.service
 
   
バッテリーが接続されたときもスクリプトを実行させるには、[[acpid]] をインストール・設定している必要があります。{{ic|/etc/acpi/handler.sh}} を編集してください:
 
 
#... other ACPI stuff
 
#... other ACPI stuff
 
battery)
 
battery)
111行目: 95行目:
 
{{ic|start-charge_thresh}} はサポートされているのに {{ic|stop_charge_thresh}} はサポートされていない場合でも、コンピュータに充電を止めさせる方法が2つあります。
 
{{ic|start-charge_thresh}} はサポートされているのに {{ic|stop_charge_thresh}} はサポートされていない場合でも、コンピュータに充電を止めさせる方法が2つあります。
   
{{Note|どちら方法も T42p では使えません。}}
+
{{Note|最初2つのオプションは、T42p では機能しません。3つ目は E540 に対応しています。}}
   
=== 1番目のオプションカスタムスクリプト ===
+
=== 1番目のオプション, カスタムスクリプト ===
   
 
* 上述のようにスクリプト {{ic|/usr/sbin/set_battery_thresholds}} を作成
 
* 上述のようにスクリプト {{ic|/usr/sbin/set_battery_thresholds}} を作成
 
* オリジナルの {{ic|/etc/acpi/handler.sh}} を {{ic|/etc/acpi/handler.sh.start}} にコピー
 
* オリジナルの {{ic|/etc/acpi/handler.sh}} を {{ic|/etc/acpi/handler.sh.start}} にコピー
 
* 上述のように {{ic|/etc/acpi/handler.sh}} を編集して {{ic|/etc/acpi/handler.sh.stop}} にコピー
 
* 上述のように {{ic|/etc/acpi/handler.sh}} を編集して {{ic|/etc/acpi/handler.sh.stop}} にコピー
以下のスクリプトをコピーして実行可能属性を付与し、自由に値を調整し、cron などで数分ごとに root で実行するようにしてください
+
次に、以下のスクリプトをコピーして実行可能し、好み合わせて値を調整し、root cron として数分ごとに実行します。
  +
#!/bin/bash
{{bc|<nowiki>
 
  +
#!/bin/bash
 
  +
CURRENTCHARGE=$(acpitool -b | cut -d, -f2 | cut -d. -f1 | cut -b2-)
 
  +
CURRENTCHARGE=$(acpitool -b | cut -d, -f2 | cut -d. -f1 | cut -b2-)
 
  +
if [ $CURRENTCHARGE -gt 80 ]; then
 
  +
cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh
if [ $CURRENTCHARGE -gt 80 ]; then
 
  +
echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh
 
  +
exit 0
echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
 
  +
fi
exit 0
 
  +
if [ $CURRENTCHARGE -lt 60 ]; then
fi
 
  +
cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh
if [ $CURRENTCHARGE -lt 60 ]; then
 
  +
echo 0 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh
 
  +
exit 0
echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
 
  +
fi
echo 0 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
 
  +
exit 0
 
  +
exit 0
fi
 
 
exit 0
 
</nowiki>}}
 
   
 
=== 2番目のオプション, tpacpi-bat ===
 
=== 2番目のオプション, tpacpi-bat ===
   
 
バッテリーの充電の閾値を制御するには、AUR から Perl スクリプトの {{Pkg|tpacpi-bat}} または {{AUR|tpacpi-bat-git}} をインストールします。
 
バッテリーの充電の閾値を制御するには、AUR から Perl スクリプトの {{Pkg|tpacpi-bat}} または {{AUR|tpacpi-bat-git}} をインストールします。
 
次を実行して {{ic|acpi_call}} カーネルモジュールをロードしてください:
 
# modprobe acpi_call
 
もしくは {{ic|/etc/rc.config}} の MODULES にカーネルモジュールを追加します。
 
   
 
手動で閾値を設定するには以下を実行:
 
手動で閾値を設定するには以下を実行:
152行目: 129行目:
 
上記の例で指定している 40 や 80 はバッテリーの最大容量からのパーセンテージです。必要に応じて調整してください。また、上記の行を {{ic|/etc/rc.local}} に追加することで起動時に実行させることができます。上記の値は永続的なはずですが、バッテリーを抜いたときに値がリセットされることがあります。
 
上記の例で指定している 40 や 80 はバッテリーの最大容量からのパーセンテージです。必要に応じて調整してください。また、上記の行を {{ic|/etc/rc.local}} に追加することで起動時に実行させることができます。上記の値は永続的なはずですが、バッテリーを抜いたときに値がリセットされることがあります。
   
{{Note|コマンドのリストは tpacpi-bat のヘルプを見て下さい: {{ic|perl /usr/lib/perl5/vendor_perl/tpacpi-bat -h}}}}
+
{{Note|コマンドのリストは tpacpi-bat のヘルプを見て下さい: {{ic|perl /usr/lib/perl5/vendor_perl/tpacpi-bat -h}}}}
   
=== 3番目のオプションカーネル ===
+
=== 3番目のオプション, カーネル ===
   
 
カーネル 4.17 には、ThinkPad のバッテリ充電のしきい値を直接調整するオプションが追加されました。
 
カーネル 4.17 には、ThinkPad のバッテリ充電のしきい値を直接調整するオプションが追加されました。
161行目: 138行目:
 
echo 40 > /sys/class/power_supply/BAT0/charge_start_threshold
 
echo 40 > /sys/class/power_supply/BAT0/charge_start_threshold
   
値を表示しようとすると最後のセットのみが表示され、128が追加されます。
+
値を表示しようとすると最後のセットのみが表示され、128が追加されます。
これは既知の問題ですが、バッテリの動作からわかるように実際は別の値が設定されています。
+
これは既知の問題ですが、バッテリの動作からわかるように実際は別の値が設定されています。
 
他の興味深いパラメータは {{ic|/sys/class/power_supply/BAT 0/}} にあります。
 
他の興味深いパラメータは {{ic|/sys/class/power_supply/BAT 0/}} にあります。
   

2023年10月13日 (金) 10:40時点における最新版

tp_smapi は ThinkPad ノートパソコンのハードウェアから情報を取得したりコマンドを送信したりするカーネルモジュールのセットです。tp_smapi の情報は /sys/devices/platform/smapi ファイルシステムに存在します。/proc ファイルシステムと同じように、ファイルから情報を読み書きしたりハードウェアにコマンドを送信することが可能です。サポートされている ThinkPad ノートパソコンを使っている場合は、tp_smapi をインストールすることが強く推奨されます。

サポートされているノートパソコン

まず、あなたのノートパソコンがサポートされているかどうか確認してください。Thinkwiki に サポートされている Thinkpad の完全なリスト が載っています。あなたの TP が stop_threshold をサポートしておらず start_threshold しかサポートしていない場合は #部分的にサポートされているノートパソコンの対処方法 を見て下さい。

Ivy Bridge プロセッサあるいはそれよりも新しいプロセッサ (型番が *30, *40, *50 のモデル) が搭載された最新の Thinkpad にインストールしても、tp_smapi は動作しません。tpacpi-battpacpi-bat-gitAUR を使って下さい。

インストール

linux の場合は tp_smapi パッケージ、または linux-lts の場合は tp_smapi-ltsインストール します。他のすべてのカーネル (例:linux-zen) の場合は、tp_smapi-dkmsAUR の使用を検討してください。

tp_smapi (およびそのバリエーション) は、次の カーネルモジュール を提供します。

tp_smapi
ThinkPad SMAPI サポート
hdaps
IBM ハードドライブアクティブ保護システム (HDAPS) ドライバー
thinkpad_ec
ThinkPad 組み込みコントローラーのハードウェアアクセス (tp_smapihdaps は両方ともこれに依存します)

再起動後、tp_smapi とその依存関係が自動ロードされ、/sys/devices/platform/smapi/ の sysfs インターフェイスが完全に機能するようになります。

機能

以下は tp_smapi を使って行えることの一部です。自由に追加してください。

バッテリーの充電の制御

長時間にわたってノートパソコンのバッテリーを満充電の状態にしておくことは良いことではありません 。長時間バッテリーを使わなければならない状況ではないかぎり、できるだけバッテリーは 40-80% ほど残っている状態にしておくべきです。

一般的な方法

tp_smapi を使うことで充電を開始したり停止する閾値を制御することができます。以下のコマンドを実行して適当な値を設定してください:

echo 40 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
echo 80 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh

上記の場合、バッテリーが 40% 以下になると充電が開始され、80% を超えるとそれ以上充電しなくなります。このように設定することでバッテリーの寿命を伸ばすことができます。

バッテリーを一度抜いて、再挿入したりすると、設定した閾値はデフォルトの値にリセットされることがあります。リセットを回避するには、値を設定するスクリプトを作成して、起動時やバッテリーが接続されたときにスクリプトを実行させるようにしてください。より詳しい手順は以下のとおりです。

スクリプト /usr/sbin/set_battery_thresholds を作成:

#!/bin/sh
# set the battery charging thresholds to extend battery lifespan
echo ${2:-40} > /sys/devices/platform/smapi/BAT${1:-0}/start_charge_thresh
echo ${3:-80} > /sys/devices/platform/smapi/BAT${1:-0}/stop_charge_thresh

実行可能 にします。このスクリプトを使用すると、バッテリーのしきい値を設定するのが非常に簡単になります。 次のように入力するだけです (set_battery_thresholds がスクリプトの名前の場合):

set_battery_thresholds 0 96 100

または、引数を指定せずに実行すると、デフォルトで BAT0 になり、しきい値が 40% と 80% になります。

起動時に systemd にスクリプトを実行させます。したがって、tp_smapi_set_battery_thresholds.service ユニットを作成し、その後 起動/有効化 します。

/etc/systemd/system/tp_smapi_set_battery_thresholds.service
[Unit]
Description=Set Battery Charge Thresholds by tp_smapi

[Service]
Type=oneshot
ExecStart=/usr/sbin/set_battery_thresholds
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

バッテリーで動作させることも可能です。これには、acpid がインストールされ、実行されている必要があります。/etc/acpi/handler.sh を編集します。

#... other ACPI stuff
battery)
  case "$2" in
    BAT0)
      case "$4" in
        00000000)
        ;;
        00000001)
        /usr/sbin/set_battery_thresholds
        ;;
#... more ACPI stuff

設定が反映されているかどうか確認

設定が反映されたかどうか確認するには、以下の出力を確認します:

cat /sys/devices/platform/smapi/BAT0/start_charge_thresh
cat /sys/devices/platform/smapi/BAT0/stop_charge_thresh

ハードディスクを落下から保護

tp_smapi にはノートパソコンの加速度計を読み取って、ハードドライブにダメージを与える落下などの動きを検出できるドライバーが含まれています。この機能に関する情報は HDAPS のページを見て下さい。

部分的にサポートされているノートパソコンの対処方法

部分的にしかサポートされていないノートパソコンでも、バッテリーの制御ができることがあります。まず実際にサポートされている機能を確認してください:

cat /sys/devices/platform/smapi/BAT0/start_charge_thresh
cat /sys/devices/platform/smapi/BAT0/stop_charge_thresh

start-charge_thresh はサポートされているのに stop_charge_thresh はサポートされていない場合でも、コンピュータに充電を止めさせる方法が2つあります。

ノート: 最初の2つのオプションは、T42p では機能しません。3つ目は E540 に対応しています。

1番目のオプション, カスタムスクリプト

  • 上述のようにスクリプト /usr/sbin/set_battery_thresholds を作成
  • オリジナルの /etc/acpi/handler.sh/etc/acpi/handler.sh.start にコピー
  • 上述のように /etc/acpi/handler.sh を編集して /etc/acpi/handler.sh.stop にコピー

次に、以下のスクリプトをコピーして実行可能にし、好みに合わせて値を調整し、root cron として数分ごとに実行します。

#!/bin/bash

CURRENTCHARGE=$(acpitool -b | cut -d, -f2 | cut -d. -f1 | cut -b2-)

if [ $CURRENTCHARGE -gt 80 ]; then
    cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh
    echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
    exit 0
fi
if [ $CURRENTCHARGE -lt 60 ]; then
    cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh    
      echo 0 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
    exit 0 
fi

exit 0

2番目のオプション, tpacpi-bat

バッテリーの充電の閾値を制御するには、AUR から Perl スクリプトの tpacpi-bat または tpacpi-bat-gitAUR をインストールします。

手動で閾値を設定するには以下を実行:

tpacpi-bat -v -s startThreshold 0 40
tpacpi-bat -v -s stopThreshold 0 80

上記の例で指定している 40 や 80 はバッテリーの最大容量からのパーセンテージです。必要に応じて調整してください。また、上記の行を /etc/rc.local に追加することで起動時に実行させることができます。上記の値は永続的なはずですが、バッテリーを抜いたときに値がリセットされることがあります。

ノート: コマンドのリストは tpacpi-bat のヘルプを見て下さい: perl /usr/lib/perl5/vendor_perl/tpacpi-bat -h

3番目のオプション, カーネル

カーネル 4.17 には、ThinkPad のバッテリ充電のしきい値を直接調整するオプションが追加されました。

echo 60 > /sys/class/power_supply/BAT0/charge_stop_threshold
echo 40 > /sys/class/power_supply/BAT0/charge_start_threshold

値を表示しようとすると最後のセットのみが表示され、128が追加されます。 これは既知の問題ですが、バッテリの動作からわかるように実際は別の値が設定されています。 他の興味深いパラメータは /sys/class/power_supply/BAT 0/ にあります。

参照

tp_smapi on ThinkWiki