画面の明るさ(輝度)を制御する

Recipe ID: hw-018

ラップトップなどの画面輝度を変更するには brightness クレートを使用します。

1. 依存関係の追加

src-tauri ディレクトリで以下のコマンドを実行します。

cargo add brightness futures

2. 実装コード (非同期)

brightness クレートは非同期操作が基本です。

use brightness::Brightness;
use futures::TryStreamExt;

#[tauri::command]
async fn set_screen_brightness(level: u32) -> Result<(), String> {
    // level: 0 - 100
    let value = level.min(100).max(0);

    // 全てのディスプレイに対して適用
    let mut devices = brightness::brightness_devices();
    
    // 見つかったデバイスそれぞれに設定
    let mut found = false;
    while let Ok(Some(mut device)) = devices.try_next().await {
        found = true;
        device.set(value).await.map_err(|e| e.to_string())?;
    }

    if !found {
        return Err("No brightness control devices found".to_string());
    }
    
    Ok(())
}

#[tauri::command]
async fn get_screen_brightness() -> Result<u32, String> {
    let mut devices = brightness::brightness_devices();
    // 最初のデバイスの値を返す
    if let Ok(Some(device)) = devices.try_next().await {
        let val = device.get().await.map_err(|e| e.to_string())?;
        return Ok(val);
    }
    
    Err("Device not found".to_string())
}

3. 注意点

  • デスクトップ PC の外部モニターの場合、DDC/CI 対応が必要であり、ドライバや接続ケーブル (HDMI/DisplayPort) によっては機能しないことがあります。
  • ラップトップの内蔵ディスプレイはほぼ確実に動作します。
  • macOS はサポートされていません (brightness クレートが macOS に対応していないため)。