Comandos del escritorio | vasak-desktop
Comandos que vasak-desktop registra en tauri::generate_handler! y que una
funcionalidad nueva del escritorio puede invocar. Están agrupados por lo que
hacen, no por archivo: varios módulos exponen comandos del mismo tema.
Todos viven en src-tauri/src/commands/ o en el módulo del tema
(clipboard/, screen_time/, tray/) y se registran en src-tauri/src/lib.rs.
Audio y micrófono#
get_audio_volume()- El volumen de salida actualset_audio_volume(volume: i64)- Fijar el volumen de salidatoggle_audio_mute()- Alternar el silencio de la salidaget_audio_devices()- Listar los dispositivos de audioget_audio_outputs()- Las salidas disponibles: los sinks y las de cada placa con otro perfilset_audio_output(sink_id: Option<String>, card: Option<String>, profile: Option<String>)- Elegir una salida por sink, o cambiar el perfil de la placa y fijarlaset_audio_device(device_id: String)- Cambiar la salida por omisiónget_microphone()- Volumen y silencio del micrófono por omisiónset_microphone_volume(volume: i64)- Fijar el volumen del micrófonotoggle_microphone_mute()- Alternar el silencio del micrófono y devolver cómo quedóget_audio_input_devices()- Listar las entradas de audioset_audio_input_device(device_id: String)- Cambiar la entrada por omisiónget_bluetooth_audio_profile(address: String)- El perfil de audio de unos auriculares Bluetooth, por su MAC
Ecualizador#
equalizer_state()- El estado entero: bandas, perfil y si está prendidoequalizer_set_gain(band: u32, gain: f64)- Mover una bandaequalizer_set_preset(preset: String)- Elegir un perfil de fábrica, ocustompara volver a los valores propiosequalizer_set_enabled(enabled: bool)- Prender o apagar el filtro
Música (MPRIS)#
music_play_pause(player: String)- Reproducir o pausarmusic_next_track(player: String)- Pasar a la pista siguientemusic_previous_track(player: String)- Volver a la pista anteriormusic_now_playing()- La pista que suena ahoramusic_stop(player: String)- Detener la reproducciónmusic_raise(player: String)- Traer al frente la ventana del reproductormusic_set_position(player: String, position: i64)- Saltar a un punto de la pista, en microsegundosmusic_set_volume(player: String, volume: f64)- Fijar el volumen del reproductormusic_set_shuffle(player: String, shuffle: bool)- Prender o apagar el modo aleatoriomusic_set_loop(player: String, status: String)- El modo de repeticiónmusic_players()- Los reproductores que hay ahora, para poder elegir entre ellosmusic_select_player(player: String)- Elegir un reproductor a mano; con el vacío vuelve la elección automáticamusic_artwork(url: String)- Los bytes de la carátula, que el WebView no puede leer del disco
Notificaciones#
send_notify(summary: String, body: Option<String>, urgency: Option<String>)- Enviar una notificaciónclear_notifications()- Limpiar todas las notificacionesget_all_notifications()- La lista de notificacionesdelete_notification(id: u32)- Eliminar una notificacióninvoke_notification_action(id: u32, action_key: String)- Ejecutar una acción de una notificaciónget_do_not_disturb()- El estado de «No molestar»set_do_not_disturb(enabled: bool)- Poner o quitar «No molestar» y devolver el estado anteriorget_game_mode()- Si el modo juego está puestoset_game_mode(enabled: bool)- Poner o sacar el modo juego y devolver el estado anterior
Portapapeles#
toggle_clipboard()- Abrir o cerrar la superposición del historialhide_clipboard()- Esconder la superposición, sin preguntar si está abiertaclipboard_history()- El historial, de lo más reciente a lo más viejoclipboard_pick(id: u64)- Volver a poner una entrada en el portapapelesclipboard_clear()- Vaciar el historial, sin tocar el portapapeles vivo
Teléfonos (Vasak Connect)#
toggle_connect_menu()- Mostrar u ocultar la lista de aplicaciones del teléfonoconnect_list_devices()- Los teléfonos conectados ahoraconnect_list_apps(serial: String, refresh: bool)- Las aplicaciones instaladas en un teléfonoconnect_launch_app(serial: String, package: String)- Abrir una aplicación del teléfono en su propia ventanaconnect_stop_app(serial: String, package: String)- Cerrar una aplicación del teléfonoconnect_list_running()- Las ventanas de teléfono abiertas ahoraconnect_list_cameras(serial: String, refresh: bool)- Las cámaras de un teléfonoconnect_start_webcam(serial: String, camera_id: String, size: String, fps: u32)- Empezar a escribir una cámara del teléfono en el dispositivo de bucle y devolver su rutaconnect_stop_webcam()- Cortar el flujo de la cámaraconnect_webcam_state()- Qué está haciendo el puente de cámara y si puede funcionar
Red, radios y VPN#
get_airplane_mode()- El estado del modo avión que ya se conoceset_airplane_mode(enabled: bool)- Poner o quitar el modo avión y devolver el estado anteriorunblock_radios(kind: String)- Desbloquear las radios de un tipo (wlanobluetooth)twingate_info()- El estado del cliente de Twingate y sus recursostwingate_authorize(resource: String)- Arrancar la autorización de un recurso bloqueado
Panel, menús y applets#
toggle_applet(applet: String, anchor: Option<AnchorRect>)- Abrir o cerrar un applet del panel, colgado del botón que lo pidiódismiss_applet(applet: String)- Cerrar un applet con su animacióndismiss_popups()- Cerrar lo que esté abierto por un clic en el escritoriotoggle_menu(anchor: Option<AnchorRect>)- Abrir o cerrar el menú, colgado de su botón del panelset_menu_button(side: String, anchor: AnchorRect)- Avisar dónde dibujó el panel el botón del menúget_menu_items()- Las aplicaciones del menúshow_panel()- Mostrar el paneltoggle_control_center()- Abrir o cerrar el centro de controlhide_control_center()- Esconder el centro de control, sin preguntar si está abiertoshow_osd(icon: String, value: f64, maximum: f64, label: String)- Mostrar el indicador en pantalla de volumen, brillo o lo que seatoggle_session_popup(action: String)- Abrir o cerrar la ventana de sesión (apagar, reiniciar, suspender)
Escritorio y ventanas#
get_windows()- Las ventanas abiertastoggle_window(window_id: String)- Mostrar u ocultar una ventanapresent_window(window_id: String)- Traer una ventana al frente, sin minimizarlaopen_app(path: &str)- Abrir una aplicación por su archivo.desktopopen_settings()- Abrir Configuraciónopen_settings_section(section: String)- Abrir Configuración en una secciónopen_calendar()- Abrir el calendarioget_workspaces()- Los espacios de la pantalla con focoswitch_workspace(index: u32)- Pasar al espacio númeroindex, desde ceroget_keyboard_layout()- La distribución de teclado de ahoranext_keyboard_layout()- Pasar a la distribución siguiente y devolver la que quedóset_panel_input_region(rects: Vec<InputRect>)- Recortar lo que recibe el puntero en el panel a las píldorasbatch_invoke(requests: Vec<BatchRequest>)- Pedir varios comandos en una sola llamada y recibir una respuesta por cada uno
Sesión, energía y bloqueo#
logout(display_server: String)- Cerrar la sesiónshutdown()- Apagar el equiporeboot()- Reiniciar el equiposuspend(display_server: String)- Suspender el equipodetect_display_server()- Decir si la sesión es Wayland, X11 o desconocidalock_screen()- Bloquear la pantalla, sin confirmaciónlock_screen_available()- Si el botón Bloquear puede hacer algoget_keep_awake()- Si el modo «mantener despierto» está puestoset_keep_awake(enabled: bool)- Ponerlo o quitarlo y devolver si estaba puestoget_night_light_state()- El estado de la luz nocturnaset_night_light_enabled(enabled: bool)- Prender o apagar la luz nocturna con la configuración guardadaapply_night_light()- Aplicar la configuración de luz nocturna que se acaba de guardarbattery_exists()- Si el equipo tiene bateríabattery_fetch_info()- Volver a leer la batería del sistemaget_battery_info()- La batería que ya se conocesystem_stats()- Uso de CPU, memoria y la temperatura más alta
Fondo de pantalla#
toggle_wallpaper_picker()- Abrir o cerrar el selector de fondoshide_wallpaper_picker()- Esconderlo, sin preguntar si está abiertowallpaper_catalog(current: Option<String>, custom_folder: Option<String>)- La fila del carrusel: los fondos oficiales, los de la carpeta propia y el actual, con sus miniaturasprepare_wallpaper(path: String)- Preparar un video para usarlo de fondo; una imagen vuelve igualallow_wallpaper_asset(path: String)- Autorizar un archivo de fondo en el protocolo de assets y devolver su ruta canónicawallpaper_pixels(path: String)- Los píxeles del fondo, para sacar los colores del esquema
Bandeja del sistema#
init_sni_watcher()- Arrancar el vigía de la bandeja; no hace nada si ya estabaget_tray_items()- Los ítems de la bandejaget_launcher_entries()- Progreso, contador y urgencia de las aplicaciones que los publicantray_item_activate(service_name: String, x: i32, y: i32)- Activar un ítem de la bandejatray_item_secondary_activate(service_name: String, x: i32, y: i32)- La activación secundaria de un ítem de la bandejaget_tray_menu(service_name: String)- El menú de un ítem de la bandejatray_menu_item_click(service_name: String, menu_id: i32)- Tocar una entrada del menú de la bandejaopen_tray_popup(service_name: String, anchor: Option<AnchorRect>)- Abrir la ventana del menú de un ítem, colgada de su botónget_tray_popup_data()- Lo que la ventana del menú tiene que dibujartray_popup_click(menu_id: i32)- Tocar una entrada en la ventana del menú de la bandeja
Calendario, tiempo de pantalla y clima#
calendar_occurrences(from: String, to: String)- Las veces de los eventos que caen en el rango, en RFC 3339calendar_tasks()- Las tareas sin completar, para el widget de tareascalendar_locations(events: Vec<EventRef>)- El lugar de unos eventosrequest_calendar_access_again()- Pedirle avasak-permissionsque vuelva a preguntar por el calendarioscreen_time_range(from: String, to: String)- Los días defromato(AAAA-MM-DD, los dos incluidos)weather_cached()- El pronóstico guardado, sin tocar la redweather_claim()- «¿Me toca pedirlo a mí?»: responde que sí a una sola ventana por vueltaweather_place()- Las coordenadas ya deducidas, si alguna ventana las averiguóweather_release()- Liberar el turno de un pedido que falló, para que otra ventana lo intenteweather_store(datos: Value, lugar: Option<Value>)- Guardar lo que trajo la ventana que reclamó y avisarlo a todas
Registros, privacidad y diagnóstico#
log_from_frontend(level: String, message: String)- Registrar un mensaje desde JavaScriptget_log_file_path()- La ruta del archivo de registro actualread_log_file()- El contenido del archivo de registroget_last_log_lines(lines: usize)- Las últimas N líneas del registroprivacy_in_use()- Qué está usando la cámara o el micrófono ahora mismoprivacy_stop_screen(session: String)- Cortar una captura de pantalla en curso
Búsqueda#
La búsqueda global ya no es parte de vasak-desktop: vive en el lanzador,
vasak-prism
, que es una aplicación
aparte y queda residente. Los comandos global_search, execute_search_result
y toggle_search salieron del escritorio con
vasak-desktop#104
y no
se pueden invocar desde el frontend.
Lo que sí queda en el escritorio es un reenvío por D-Bus: los métodos
OpenSearch y ToggleSearch del servicio org.vasak.os.Desktop siguen
existiendo para que un atajo, un script o una configuración que todavía los
llame no quede muerto. No hacen la búsqueda: llaman al método Toggle del
lanzador, que muestra u oculta su ventana.
| Nombre en el bus | Objeto | Interfaz | Método | |
|---|---|---|---|---|
| Escritorio (reenvía) | org.vasak.os.Desktop | cualquiera | cualquiera | OpenSearch, ToggleSearch |
| Lanzador (destino) | ar.net.vasak.Prism | /ar/net/vasak/Prism | ar.net.vasak.Prism | Toggle |
| |
El servicio del escritorio atiende todo lo que llega a su nombre sin mirar el
objeto ni la interfaz, así que la ruta del primer ejemplo es una convención y
no un requisito. Desde vasak-desktop 1.64.1 todos los métodos del servicio
contestan, así que la llamada vuelve en el acto. Qué contestan depende del
método:
ListWindowsdevuelve la lista de ventanas en JSON.PresentWindow,OpenMenu,OpenControlCenter,OpenWallpaperPicker,PauseWallpaperyResumeWallpaperhacen la acción antes de contestar: un retorno vacío si se hizo,org.vasak.os.Desktop.Errorcon el motivo si no.OpenSearch,ToggleSearch,OpenSessionPopup,PowerButtonPressed,ClearScreenTimeyPresentAppsiguen trabajando en otra tarea, así que contestan con un retorno vacío apenas despachan el pedido. Si después algo falla —por ejemplo, el reenvío avasak-prism— queda anotado en el registro del escritorio, no en la respuesta.PresentWindowyPresentAppsin el argumento que esperan devuelvenorg.freedesktop.DBus.Error.InvalidArgs.- Un nombre que el servicio no tiene devuelve
org.freedesktop.DBus.Error.UnknownMethod.
Quien pide no recibir respuesta (--expect-reply=no en busctl, o
dbus-send sin --print-reply) sigue funcionando igual: a ése no se le
contesta. Antes de la 1.64.1 casi ningún método contestaba y la llamada sin esa
marca quedaba colgada hasta que vencía el tiempo de D-Bus. El lanzador instala un archivo de activación por D-Bus: si no
está corriendo, el bus lo levanta con esa misma llamada. Si vasak-prism no
está instalado, el reenvío falla y el escritorio lo anota en su registro, sin
caerse. El lanzador expone además Show y Hide en el mismo objeto.